我正在尝试从模式中查找列 ( ABC
) 及其值1234
,基本上我需要检查ABC和该列1234中的值是否存在于映射到ABC的任何其他表中,我试图搜索最有效的方法,但需要花费大量时间并且无法检索到所需的结果
但查询根本不是结果,它正在运行...
我正在尝试从模式中查找列 ( ABC
) 及其值1234
,基本上我需要检查ABC和该列1234中的值是否存在于映射到ABC的任何其他表中,我试图搜索最有效的方法,但需要花费大量时间并且无法检索到所需的结果
但查询根本不是结果,它正在运行...
如果缓冲区溢出,您可以将输出写入文件,set Serveroutput
否则应该这样做。输出将包含所有具有'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;