【问题标题】:Pipelined function gives "PLS-00630" error upon compilation流水线函数在编译时给出“PLS-00630”错误
【发布时间】:2019-04-15 19:36:51
【问题描述】:

我是表函数的新手。尝试使用该函数编译包时,我收到“PLS-00630 流水线函数必须具有受支持的集合返回类型”。

该函数的目的是从 RUN_LOG 审计表中返回记录列表。它需要一个输入日期,该日期将返回该日期的记录。

PROCS_COMPLETED 对象的数据类型与 RUN_LOG 表匹配。

创建了这些对象:

CREATE OR REPLACE TYPE PROCS_COMPLETED IS OBJECT (
    RECORD_ID      NUMBER
  , RUN_START_DATE DATE
  , RUN_END_DATE   DATE
  , OWNER          VARCHAR2(50)
  , PROC_NAME      VARCHAR2(162)
);

CREATE OR REPLACE TYPE PROCS_COMPLETED_INFO IS TABLE OF PROCS_COMPLETED;

包规范中的函数声明:

FUNCTION GET_PROCS_COMPLETED(ID_DATE IN DATE) RETURN PROCS_COMPLETED PIPELINED;

包体中的函数:

FUNCTION GET_PROCS_COMPLETED(ID_DATE IN DATE) RETURN PROCS_COMPLETED PIPELINED AS
BEGIN
  FOR C_PROCS_COMPLETED IN (
                            SELECT r.RECORD_ID
                                 , r.RUN_START_DATE
                                 , r.RUN_END_DATE
                                 , r.OWNER
                                 , r.PROC_NAME
                              FROM RUN_LOG r
                             WHERE TRUNC(r.RUN_START_DATE) = TRUNC(ID_DATE)
                           )
  LOOP
    PIPE ROW (PROCS_COMPLETED_INFO
               (  C_PROCS_COMPLETED.RECORD_ID
                , C_PROCS_COMPLETED.RUN_START_DATE
                , C_PROCS_COMPLETED.RUN_END_DATE
                , C_PROCS_COMPLETED.OWNER
                , C_PROCS_COMPLETED.PROC_NAME
               )
             );
  END LOOP;
  RETURN;
END;

【问题讨论】:

  • 在函数声明中,返回类型应该是集合变量..即PROCS_COMPLETED_INFO..
  • 顺便说一下,您的大写锁定已开启。

标签: oracle plsql


【解决方案1】:

如果您仔细阅读错误消息,它实际上会告诉您问题所在:

流水线函数必须具有受支持的集合返回类型

(强调我的)。

所以,RETURN PROCS_COMPLETED_INFO

另一个错误是尝试管道集合类型 -- PIPE ROW (PROCS_COMPLETED_INFO(...)) -- 而您想要管道 ROW: PIPE ROW (PROCS_COMPLETED(...))

【讨论】:

  • 谢谢。是的,这是有道理的,现在正在发挥作用。
猜你喜欢
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 2014-04-12
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
相关资源
最近更新 更多