我一个存储过程是这样的
create or replace procedure proc_HBJUpdate
(rate in varchar2,--比例
nd in varchar2)  --年代
as
begin
update jfmxb set HBJ1=grjf1*rate where ND=nd;
end;执行的时候是这样写的
declare begin 
 Execute immediate proc_HBJUpdate(0.5, 1998);
end;
错误提示:非法的变量名/编号执行语句该怎么写呢?

解决方案 »

  1.   

    變量名nd換個名字,不要和字段一樣。
    create or replace procedure proc_HBJUpdate
    (rate in varchar2,--比例
    l_nd in varchar2) --年代
    as
    begin
    update jfmxb set HBJ1=grjf1*rate where ND=l_nd;
    end;
    字符型,加引號。
    begin  
     Execute immediate proc_HBJUpdate('0.5', '1998');
    end;
      

  2.   

    create or replace procedure proc_HBJUpdate
    (rate in number,--比例
    l_nd in varchar2) --年代
    as
    begin
    update jfmxb set HBJ1=grjf1*rate where ND=l_nd;
    end;
    begin   
     Execute immediate proc_HBJUpdate(0.5, '1998');
    end;
    这样试试
      

  3.   

    我右击该存储过程,然后选择测试,输入
    begin   
     Execute immediate proc_HBJUpdate('0.5', '1998');
    end;
    还是错误提示:非法的变量名/编号
      

  4.   

    begin   
    proc_HBJUpdate('0.5','1998');
    end;
    直接这样就OK了,不需要加Execute immediate 这个
      

  5.   

    as
    begin
    update jfmxb set HBJ1=grjf1*rate where ND=nd;
    end;
     这里的入参要加引号吧'rate'不能直接乘以