我继承了一个大型数据库,似乎没有人知道特定数据集来自哪个表/列。我花了很多时间在Oracle的SQL Developer中逐页查阅,但我找不到它。 SQLDeveloper中是否有一种方法可以在整个表中搜索单个值。类似的东西:
select table_name from all_tab_columns where column_value='desired value';
db有大约1K +表,每个表都有很多列,所以手动梳理这个表是行不通的。
答案 0 :(得分:0)
您可以使用以下脚本在架构的所有列中搜索值。脚本的执行时间取决于架构中的表数和每个表中的行数。
将'abc'替换为您要搜索的值。此外,此时脚本将搜索所有VARCHAR2列。您还可以将表名和计数插入表中,而不是执行DBMS_OUTPUT.PUT_LINE。
DECLARE
CURSOR cur_tables
IS
SELECT table_name,
column_name
FROM user_tab_columns
WHERE data_type = 'VARCHAR2';
v_sql VARCHAR2(4000);
v_value VARCHAR2(50);
v_count NUMBER;
BEGIN
v_value := 'abc';
FOR c_tables IN cur_tables LOOP
v_sql := 'SELECT count(1) FROM ' || c_tables.table_name || ' WHERE ' || c_tables.column_name || ' = :val' ;
EXECUTE IMMEDIATE v_sql INTO v_count USING v_value;
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE('Table Name ' || c_tables.table_name || ' Column Name ' || c_tables.column_name || ' Row Count ' || v_count);
END IF;
END LOOP;
END;