我目前正在使用的 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 包含一个带有逗号分隔表列表的字符串,它似乎正在工作,但它仍然远离一个干净、编写良好、设计良好的代码。
我尝试了其他不值得一提的选项,例如尝试编写函数等。
我在这件事上迷路了,任何想法都可以很好地测试出来。