1.过程
create or replace procedure compute1(num1 in out number,num2 in out number)
is
 v1 number;
 v2 number;
begin
 v1 := num1/num2;
 v2 := mod(num1/num2);
 num1 = v1;
 num2 = v2;
end;2.调用(错误1)
 declare
   n1 number := &num1;
   n2 number := &num2;
 begin
      compute1(n1,n2);
      dbms_output.put_line('num1:'||n1);
      dbms_output.put_line('num2:'||n2);
 end;
错误提示:ORA-06550:第5行,第7列
PLS-00905:对象DMS.comput1 无效
ORA-06550:第5行,第7列
PL/SQL statement ignored3.另一种调用方法(错误2)如下:
SQL> var n1 number;
SQL> var n2 number;
SQL> exec :n1:=100;PL/SQL procedure successfully completed
n1
---------
100SQL> exec :n2:=30;PL/SQL procedure successfully completed
n2
---------
30
以上都对。
SQL> exec compute1(:n1,:n2);begin compute1(:n1,:n2); end;ORA-06550: 第 1 行, 第 7 列: 
PLS-00905: 对象 DMS.COMPUTE1 无效
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored

n1
---------
100
n2
---------
30出错了,为什么呢?请大家看一下,谢谢

解决方案 »

  1.   

    因为你的存储过程创建有错误,根本未通过编译。PL/SQL 里看看,是不是有个红叉叉或者sqlplus下show error
      

  2.   

    create or replace procedure compute1(num1 in out number,num2 in out number)
    is
       v1 number;
       v2 number;
    begin
       v1 := num1/num2;
       v2 := mod(num1,num2);
       num1 := v1;
       num2 := v2;
    end;
    SQL> var n1 number;
    SQL> var n2 number;
    SQL> exec compute1(:n1,:n2);PL/SQL 过程已成功完成。SQL>
      

  3.   

    大家给解释一下,调用过程2,
    SQL> var n1 number; 
    SQL> var n2 number; 
    SQL> exec :n1:=100; 
    SQL> exec :n2:=30; 
    是什么意思呢?
    我的过程确实错了,谢谢大家
      

  4.   

    var n1 number  声明主机变量,名n1,型numberexec :n1:=100  为主机变量n1赋值100