oracle在toad中使用ref_cursor调用sp

时间:2013-01-13 01:31:02

标签: oracle toad

哪里出错了,拜托?

规格:

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表达式的行类型错误

2 个答案:

答案 0 :(得分: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行的记录集。

答案 1 :(得分:0)

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

RETURN_RECORDSET CTI_MATRIX.AMD.REF_CURSOR;