我是表函数的新手。尝试使用该函数编译程序包时,我收到“ 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;
答案 0 :(得分:0)
如果您仔细阅读错误消息,它实际上会告诉您出什么问题了:
流水线函数必须具有受支持的集合返回类型
(重点是我的)。
所以RETURN PROCS_COMPLETED_INFO
。
另一个错误是,当您要传送PIPE ROW (PROCS_COMPLETED_INFO(...))
时,试图传送集合类型ROW
:PIPE ROW (PROCS_COMPLETED(...))