繁体   English   中英

Oracle Package返回表

[英]Oracle Package return table

我试图通过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的内容,但是我不了解其语法...

以下代码:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM