0

请问哪里出错了?

规格:

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;

来自 TOAD 的失败块:

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

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

4

2 回答 2

0

您以谁的身份登录?

作为:

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 行的记录集。

于 2013-01-13T08:42:19.003 回答
0

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

RETURN_RECORDSET CTI_MATRIX.AMD.REF_CURSOR;
于 2013-01-13T08:54:33.970 回答