Вы можете записать вывод в файл, если вы получаете переполнение буфера на 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 AB C, следует выполнить простой запрос, как показано ниже.
select table_name
from dba_tab_columns
where column_name = UPPER('ABC');
PS: Таблицы метаданных (dba_Tab_columns) хранят имя_столбца в верхний регистр, чтобы избежать проблем с регистром, преобразование регистра в верхний для литерала.
Второй запрос в блоке 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;