我有一个表:
CREATE TABLE EMPLOYEE
(
EMP_NAME VARCHAR2(30 BYTE) NOT NULL,
EMP_ID NUMBER NOT NULL,
SALARY NUMBER NOT NULL,
DEPT_ID NUMBER,
UNIQUE ("EMP_ID"),
FOREIGN KEY ("DEPT_ID") REFERENCES DEPARTMENT ("DEPT_ID")
)
然后创建了一个 Object 类型的 Employee 表和一个嵌套表:
create or replace TYPE EMP_TYPE AS OBJECT (
EMP_NAME VARCHAR2(30 BYTE),
EMP_ID NUMBER,
SALARY NUMBER,
DEPT_ID NUMBER
)
create or replace TYPE EMP_DIS as TABLE OF EMP_TYPE;
现在创建了一个包:
create or replace
PACKAGE CURR_TRADE_TEST AS
TYPE EMP_DISPLAY IS TABLE OF EMPLOYEE%ROWTYPE; //Nested Table
PROCEDURE EMP_TRADE(E_T OUT EMP_DISPLAY); // proc 1
PROCEDURE EMP_TRD(EMP_TRD OUT EMP_DIS); // proc 2
END CURR_TRADE_TEST;
包装体为:
CREATE OR REPLACE
--proc 1
PACKAGE BODY CURR_TRADE_TEST AS
PROCEDURE EMP_TRADE(E_T OUT EMP_DISPLAY) AS
str VARCHAR2(1000);
BEGIN
STR:='select * from EMPLOYEE';
EXECUTE IMMEDIATE(STR) BULK COLLECT INTO E_T;
END EMP_TRADE;
--proc 2
PROCEDURE EMP_TRD(EMP_TRD OUT EMP_DIS) AS
str VARCHAR2(1000);
BEGIN
STR:='select * from EMPLOYEE';
EXECUTE IMMEDIATE(STR) BULK COLLECT INTO EMP_TRD;
END EMP_TRD;
END CURR_TRADE_TEST;
现在当我调用 proc 1 时,如下所示得到预期的输出:
DECLARE
T_D CURR_TRADE_TEST.EMP_DISPLAY;
BEGIN
CURR_TRADE_TEST.EMP_TRADE(T_D);
FOR I IN T_D.FIRST..T_D.LAST
LOOP
DBMS_OUTPUT.PUT_LINE(T_D(I).EMP_NAME||' '||T_D(I).EMP_ID);
END LOOP;
end;
但是用 proc 2 调用我收到错误:
DECLARE
E_D EMP_DIS;
BEGIN
CURR_TRADE_TEST.EMP_TRD(E_D);
FOR I IN E_D.FIRST..E_D.LAST
LOOP
DBMS_OUTPUT.PUT_LINE(E_D(I).EMP_NAME||' '||E_D(I).EMP_ID);
END LOOP;
end;
Error report:
ORA-00932: inconsistent datatypes: expected - got -
ORA-06512: at "ONLINE_PROD_FX_STAGING.CURR_TRADE_TEST", line 12
ORA-06512: at line 4
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
anyboy 可以告诉我如何显示proc2的结果。