使用SQL Developer在表中查找值

时间:2016-04-26 22:34:21

标签: oracle

我继承了一个大型数据库,似乎没有人知道特定数据集来自哪个表/列。我花了很多时间在Oracle的SQL Developer中逐页查阅,但我找不到它。 SQLDeveloper中是否有一种方法可以在整个表中搜索单个值。类似的东西:

select table_name from all_tab_columns where column_value='desired value';

db有大约1K +表,每个表都有很多列,所以手动梳理这个表是行不通的。

1 个答案:

答案 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;