【发布时间】:2014-04-07 12:08:40
【问题描述】:
我尝试在SELECT语句中使用表类型的变量,但出现错误:
DECLARE
TYPE v2t IS TABLE OF table_a.id%TYPE INDEX BY BINARY_INTEGER;
TYPE test_type IS TABLE OF table_a.id%TYPE INDEX BY BINARY_INTEGER;
test_table1 test_type;
test_table2 test_type;
databaseArray v2t;
BEGIN
SELECT id BULK COLLECT INTO test_table1 FROM
(SELECT id FROM test_a WHERE some_flag = 1);
FOR i IN 1..test_table1.COUNT LOOP
databaseArray(i) := test_table1(i);
END LOOP;
SELECT id BULK COLLECT INTO test_table2 FROM
(SELECT id FROM TABLE(databaseArray)); --error ORA-22905
END;
test_table1 作为表格不可见。 有什么方法可以在 SELECT 语句中使用 test_table1 吗? 我需要有两个结果子集。
【问题讨论】:
-
我编辑了我的代码,但仍然出现错误
-
@DavidSilva - 必须在模式级别声明类型,如链接问题的答案所示,使用
create type- 不仅仅是在declare部分。它必须是数据库类型,而不是 PL/SQL 类型,您才能在 SQL 中引用它(甚至是 PL/SQL 中的 SQL)。目前v2t和database_array没有添加任何内容。 -
@Alex Poole,有什么方法可以在不声明任何架构级别的情况下做类似的事情吗?