У меня есть процедура, которую я использую для вывода количества строк в файл .csv, но некоторые из предложений where, которые я могу использовать, содержатся в таблице. Как я могу использовать их для создания условий для подсчета?
Я пытался использовать конкатенационные каналы для выбора таблицы, в которой содержатся предложения where, но я не совсем понимаю синтаксис и то, куда они должны идти, и я считаю, что именно здесь мне больше всего нужна помощь.
Это столбцы таблицы, в которой содержатся некоторые предложения where, которые я в конечном итоге хочу использовать в процедуре.
SCHEMA, DATABASE, FULL_TABLE, DRIVER_TABLE, MAND_JOIN
И значения могут быть такими:
PROD, DB1, RLTSHP, BOB.R_ID, A.AR_ID = B.AR_ID
Процедура, которую я написал, выглядит следующим образом:
create or replace procedure PROJECT is
--variables
l_dblink varchar2(100) := 'DB1';
ROW_COUNT number;
file_handle UTL_FILE.file_type;
BEGIN
utl_file.put_line(file_handle, 'OWNER,TABLE_NAME,ROW_COUNT');
--main loop
for rws in (select /*+parallel */ owner, table_name
from dba_tables@DB1 a
where table_name in (select table_name
from meta_table
where driver_table is not null
and additional_joins is null)
and a.owner in (select distinct schema
from meta_table c)
order by table_name)
loop
execute immediate 'select count(*) from ' ||rws.owner||'.'||rws.table_name || '@' || l_dblink into ROW_COUNT;
utl_file.put_line(file_handle,
rws.OWNER || ',' ||
rws.TABLE_NAME || ',' ||
ROW_COUNT);
end loop;
END PROJECT;
/
Однако вместо простого select count(*)
, отраженного в приведенном выше, я хочу найти способ включить данные в meta_table, чтобы создать предложения "where", которые используют соединения таблиц, чтобы ограничить вывод, чтобы я не считал все строки, но строки, которые соответствуют критериям в построенном мною соединении.
Например, фактический счетчик будет выглядеть примерно так:
select count(*)
from PROD.RLTSHP@DB1 b,
BOB.R_ID@DB1 a
where A.AR_ID = B.AR_ID;
По сути, я бы строил запрос, используя записи в meta_table. Я думаю, что могу сделать это с помощью concat's / pipe, но я точно не знаю как.
Можете ли вы помочь?