У меня есть таблица, которая содержит список имен таблиц.
Я хотел бы искать каждую из этих таблиц одну за другой, чтобы увидеть, содержат ли они определенный элемент (первичный ключ, указанный в начале скрипта).
Я хотел бы вернуть список всех таблиц, в которых присутствует этот элемент (в идеальном случае).
Я довольно новичок в этом PL / SQL "не просто запрос". поэтому я заранее прошу прощения за ужасную попытку, которую вы собираетесь увидеть, но, надеюсь, это иллюстрирует то, к чему я стремлюсь:
PROCEDURE CHECK_FOR_ELEMENTS
BEGIN
DECLARE
ELEMENT_KEY varchar(5):=X78ehryfk;
RNUM_MAX int :=167;
----create output table for script
create or replace table ALL_TABLES CONTAINING_&ELEMENT_KEY
(ELEMENT_KEY VARCHAR(255),
TABLE_NAME varchar(255))
/
commit;
---begin loop over rnum;
FOR rnum_counter in 1..&RNUM_MAX
LOOP
--define this statement as variable TABLE_NAME_VAR
select table_name from (select * from (select table_name, rownum as rnum
from all_tables
where owner = 'RMS'
and table_name like 'ABC%'
and table_name not like '%STG'
and table_name not like '%BKP'
and num_rows>0
order by num_rows desc)
where rnum = rnum_counter
)INTO TABLE_NAME_VAR
;
----run below to collect row, if it exists, from table being searched
SQL_STMT:='INSERT INTO ALL_TABLES CONTAINING_&ELEMENT_KEY
SELECT distinct key,'||TABLE_NAME_VAR||' as UMF from
'||TABLE_NAME_VAR||
' where key like 'ELEMENT_KEY-%'
execute immediate SQL_STMT;
commit;
---insert row into table created for output
END LOOP
---loop over all tables
END;
Основное сообщение об ошибке, которое я получаю, заключается в том, что TABLE_NAME_VAR не является допустимым именем таблицы в динамическом операторе SQL. Я немного погуглил и теперь понимаю, что вы не можете использовать переменные для ввода имен таблиц таким способом.
Любая помощь очень ценится!
Спасибо!