从模式中查找列和值扫描所有 table in oracle

Find a column and a value from a schema scan all the table in oracle

我正在尝试从架构中查找列 (ABC) 及其值 1234,基本上我需要检查是否 ABC 和此列 1234 中的值存在于映射到 ABC 的任何其他 table 中,我尝试进行最多的搜索有效的方法,但它会花费大量时间并且无法检索到所需的结果

我试过了 https://lalitkumarb.wordpress.com/2015/01/06/sql-to-search-for-a-value-in-all-columns-of-all-atbles-in-an-entire-schema/

但查询根本不是结果它是 运行 运行...

如果在 set Serveroutput 上出现缓冲区溢出,您可以将输出写入文件,否则这应该 do.Output 将包含具有 'ABC' 列的所有表,并且相应的计数显示计数将 ABC 列值记录为 1234.

SET SERVEROUTPUT ON 100000
DECLARE 
lv_count number(10):=0;
l_str    varchar2 (1000);
BEGIN 
FOR V1 IN 
(select distinct table_name 
 from dba_tab_columns 
 where column_name = 'ABC')

 LOOP

  BEGIN 
    lv_query := ' select count(*) from '||v1.table_name||' where ABC =1234';
    EXECUTE IMMEDIATE lv_query INTO lv_count;
    dbms_output.put_line(v1.table_name||' --> '||lv_count);

    EXCEPTION 
       WHEN OTHERS THEN 
         dbms_output.put_line('OTHERS EXCEPTION '||v1.table_name||' ERRCODE '||SQLERRM||' '||SUBSTR(SQLCODE,1,200));
    END; 

 END LOOP;

END;

要查找具有 column_name ABC 的所有表,应该执行如下简单查询。

select table_name 
     from dba_tab_columns 
     where column_name = UPPER('ABC');

PS:元数据表(dba_Tab_columns)以大写形式存储 column_name,以避免任何大小写问题,将文字的大小写转换为大写。

PL/SQL 块中的第二个查询,

 SET SERVEROUTPUT ON 100000
    DECLARE 
    lv_count number(10):=0;
    l_str    varchar2 (1000);
    lv_col_name varchar2(255) :='ABC';

    BEGIN 
    FOR V1 IN 
    (select distinct table_name 
     from dba_tab_columns 
     where column_name = lv_col_name)

     LOOP
      dbms_output.put_line(lv_col_name||' '||v1.table_name);    
     END LOOP;

    END;