我试图通过Oracle包中的函数返回一个表:
CREATE OR REPLACE PACKAGE test AS
TYPE rec IS RECORD(
col1 VARCHAR(10));
TYPE rec_table IS TABLE OF rec;
FUNCTION get_table(input VARCHAR2)
RETURN rec_table
PIPELINED;
END;
CREATE OR REPLACE PACKAGE BODY test AS
FUNCTION get_table(input VARCHAR2)
RETURN rec_table
PIPELINED IS
rec1 rec;
BEGIN
SELECT * INTO rec1
FROM
(
SELECT '1' from dual
UNION ALL
SELECT '2' from dual
);
PIPE ROW (rec1)
RETURN;
END get_table;
END;
但是当我尝试运行时
select * from table(test.get_table('blah'))
我收到错误:确切的提取返回的次数超过了请求的行数
我已经阅读了一些关于BULK COLLECT INTO的内容,但我不理解语法......
答案 0 :(得分:1)
以下代码:
SELECT '1' from dual
UNION ALL
SELECT '2' from dual
返回两个而不是一个记录,并且您尝试将这两个记录放在一个rec
变量中。您应该循环遍历UNION
:
FOR v_rec IN (
SELECT *
FROM (
SELECT '1' from dual
UNION ALL
SELECT '2' from dual
)
)
LOOP
PIPE ROW (v_rec);
END LOOP;