Oracle调用sp与ref_cursor out在蟾蜍



请问哪里出了问题?

规范:

CREATE OR REPLACE PACKAGE CTI_MATRIX.AMD AS
  TYPE REF_CURSOR IS REF CURSOR;
  PROCEDURE AMD_NEEDMSG (v_CRN IN VARCHAR2, return_recordset OUT REF_CURSOR);
END AMD;
身体:

CREATE OR REPLACE PACKAGE BODY CTI_MATRIX.AMD AS
PROCEDURE AMD_NEEDMSG (v_CRN IN VARCHAR2, return_recordset OUT REF_CURSOR)
IS
BEGIN
    -- 
END AMD_NEEDMSG;
END AMD;

from TOAD:

DECLARE 
RETURN_RECORDSET AMD.REF_CURSOR;
BEGIN 
    RETURN_RECORDSET := NULL;
    CTI_MATRIX.AMD.AMD_NEEDMSG ( '123456789', RETURN_RECORDSET );
END;

错误:PLS-00382表达式类型错误第5行

您以谁的身份登录?

:

DECLARE 
RETURN_RECORDSET AMD.REF_CURSOR;
BEGIN 
    RETURN_RECORDSET := NULL;
    CTI_MATRIX.AMD.AMD_NEEDMSG ( '123456789', RETURN_RECORDSET );
END;

是正确的语法,但我看到你是在包调用(CTI_MATRIX)上添加所有者的前缀,而不是在RETURN_RECORDSET AMD.REF_CURSOR;的声明上。如果你以另一个用户的身份调用它,这个用户也有一个包AMD的副本,那么你会得到这个错误消息。

也不需要将NULL分配给第4行的记录集。

在过程中第二个参数的类型是"REF_CURSOR",而在测试pl/sql块中它的类型是"AMD.REF_CURSOR"。检查一下这两种类型是否相同,我猜不是。或者更改测试pl/sql块,以便像这样定义变量:

RETURN_RECORDSET CTI_MATRIX.AMD.REF_CURSOR;

最新更新