Oracle 返回自定义表类型将引发错误
我创建了以下包,然后在运行提供的sql后出错。 我创建了对象类型、表类型和包 请帮帮我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
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是有实际原因的