Oracle 返回自定义表类型将引发错误

Oracle 返回自定义表类型将引发错误,oracle,return-type,Oracle,Return Type,我创建了以下包,然后在运行提供的sql后出错。 我创建了对象类型、表类型和包 请帮帮我 CREATE TYPE ItemRec AS OBJECT (TABLE_NAME VARCHAR2(50), ISSUE VARCHAR2(4000)); / CREATE TYPE ItemSet IS TABLE OF ItemRec; / CREATE OR REPLACE PACKAGE PKG_REPL_DATA AS FUNCTION FN_REPL

我创建了以下包,然后在运行提供的sql后出错。 我创建了对象类型、表类型和包

请帮帮我

CREATE TYPE ItemRec
 AS OBJECT
 (TABLE_NAME VARCHAR2(50),
    ISSUE      VARCHAR2(4000));
    /

CREATE TYPE ItemSet
IS
  TABLE OF ItemRec;
  /

CREATE OR REPLACE
PACKAGE PKG_REPL_DATA
AS
  FUNCTION FN_REPL_DELTA
    RETURN ItemSet;
END;
/
CREATE OR REPLACE
PACKAGE BODY PKG_REPL_DATA
AS
FUNCTION FN_REPL_DELTA
  RETURN ItemSet
AS
  v_items ItemSet;
  v_item_out ItemRec;
  v_list_out ItemSet;
BEGIN
  EXECUTE IMMEDIATE ' SELECT ''ABCD'', ''CUSTID: '' || 1 FROM DUAL' BULK COLLECT INTO v_items;
  RETURN v_items;
END;
END;
/
下面的sql给出了一个错误

SELECT * FROM TABLE(cast(pkg_repl_data.fn_repl_delta() AS ItemSet));
错误:

Error starting at line 43 in command:
SELECT * FROM TABLE(cast(pkg_repl_data.fn_repl_delta() AS ItemSet))
Error report:
SQL Error: ORA-00932: inconsistent datatypes: expected UDT got CHAR
ORA-06512: at "DSTBREPR3.PKG_REPL_DATA", line 10
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

您需要选择单个对象类型,而不是两个单独的
varchar2
值。差不多

EXECUTE IMMEDIATE
  'SELECT ItemRec( ''ABCD'', ''CUSTID:'' ) FROM dual'
  BULK COLLECT INTO v_items;
在您的代码示例中,没有理由在这里使用动态SQL,这只会使代码复杂化。希望在您正在构建的实际代码中使用动态SQL是有实际原因的