現在使用している 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 を宣言しようとしましたが、機能しているように見えますが、クリーンで適切に作成された適切に設計されたコードとはかけ離れています。
関数を作成しようとするなど、言及する価値のない他のオプションを試しました。
私はこの問題で迷っています。どんなアイデアでもテストするのは素晴らしいことです。