刚写了一个存储过程,接口如下:
create or replace procedure PROCEDURE_HOLDWAIT(
  PA_INVOICENO IN T_INVOICEDETAIL.ORDERNO%TYPE,
  PA_USER_ID IN T_INVOICE.Upd_Userid%TYPE,
  PA_EMAILADDRESS OUT M_LOGIN.EMAIL%TYPE
 )
 AS想用plsql developer测试以下,在test script中,输入如下。
declare
  email M_LOGIN.EMAIL%TYPE;
  invoiceno T_INVOICEDETAIL.ORDERNO%TYPE;
  userid T_INVOICE.Upd_Userid%TYPE;
  invoiceno = 9008;
  userid = 'user01';
  
begin
  -- Call the procedure
   PROCEDURE_HOLDWAIT.procedure_holdwait(invoiceno,userid,pgid,email);
end;结果一运行,报错说是变量无效。
为了测试这个存储过程,如何来写declare呢?

解决方案 »

  1.   

    1、你的存储过程好像不对啊:
    create or replace procedure PROCEDURE_HOLDWAIT(
      PA_INVOICENO IN T_INVOICEDETAIL.ORDERNO%TYPE,
     ....
     )
     AS
    ------>这是以前通过的一个:
    PROCEDURE xxx_xxx(
        iv_jigyocode  IN   VARCHAR2,   
        on_status     OUT  NUMBER,
        ov_message    OUT  VARCHAR2,
        on_oraerrcode OUT  NUMBER,
        ov_oraerrm    OUT  VARCHAR2
      )
      IS
      

  2.   

    2、这是当时的调试语句,你看看:
    ---------------------
    DECLARE
       iv_jigyocode  VARCHAR2(100);
       on_status     NUMBER;
       ov_message    VARCHAR2(100);
       on_oraerrcode NUMBER;
       ov_oraerrm    VARCHAR2(100);
    BEGIN
      xxx_xxx(iv_jigyocode ,
                               on_status ,
                               ov_message,
                               on_oraerrcode,
                               ov_oraerrm);
      DBMS_OUTPUT.PUT_LINE(iv_jigyocode || TO_CHAR(on_status) || ov_message || TO_CHAR(on_oraerrcode) ||
      ov_oraerrm);
    END;
    /
      

  3.   

    说明一下:
    我对存储过程的语法也不记太清楚了,但你的过程中定义3个变量,
      PA_INVOICENO IN T_INVOICEDETAIL.ORDERNO%TYPE,
      PA_USER_ID IN T_INVOICE.Upd_Userid%TYPE,
      PA_EMAILADDRESS OUT M_LOGIN.EMAIL%TYPE
    调试传入4个
     PROCEDURE_HOLDWAIT.procedure_holdwait(invoiceno,userid,pgid,email);
    好像有问题吧!