У меня большая проблема с пакетом PL-SQL, с которым я сейчас работаю.
Все, что я хочу сделать, это создать небольшой фрагмент кода, который будет делать это:
В разделе IS
функции:
l_tabellen_excl DBMS_utility.name_array;
Далее в коде:
SELECT DISTINCT TABLE_NAME
BULK COLLECT INTO l_tabellen_excl
FROM
ALL_TAB_COLUMNS
WHERE
TABLE_NAME IN ('TAB_1', 'TAB_2');
Чтобы, наконец, использовать эту переменную в операторе SELECT
:
AND col.table_name NOT IN (SELECT * FROM TABLE (l_tabellen_excl))
Я получаю ORA-22905: cannot access rows from a non-nested table item
здесь.
Я знаю, что мог бы просто написать AND col.table_name NOT IN ('TAB_1','TAB_2')
, но я не хочу жестко кодировать его в самых глубоких ямах кода... что затрудняет его поиск и менее настраиваемый.
Я пробовал ТОННУ вещей:
type array_t is table of varchar2(10);
Не работает. Я получаю сообщение об ошибке, говорящее о том, что я не могу использовать локально объявленную коллекцию в операторе SELECT.
Я попытался привести переменную i_tabellen_excl
к локально объявленному типу - как обходной путь. Но я получаю ORA-00902 - неверный тип данных.
Я попытался объявить VARCHAR2, содержащий строку со списком таблиц, разделенных запятыми, кажется, что он работает, но все же он далек от чистого, хорошо написанного, хорошо разработанного кода.
Я пробовал другие варианты, о которых не стоит упоминать, например, пытался написать функцию и т. Д.
Я потерялся в этом вопросе, ЛЮБЫЕ идеи было бы здорово проверить.