创建了如下的存储过程.尚学堂滴.
用PLSQL执行这个过程却出错了..
测试语句运行结果是未声明绑定变量n4..
大家帮我看看错哪了.
请问当一个参数v_temp是既是in又是out的时候,在PLSQL语句中怎么打印出它的值?存储过程:
create or replace procedure p
   (v_a in number, v_b number, v_ret out number, v_temp in out number)
isbegin
   if (v_a > v_b) then
      v_ret := v_a;
   else
      v_ret := v_b;
   end if;
   v_temp := v_temp + 1;
end;
测试语句:
declare
n1 number;
n2 number;
n3 number;
n4 number;
begin
n1 := 3;
n2 := 4;
n4 := 5;
execute p(:n1, :n2, :n3, :n4);
dbms_output.put_line('ok');
dbms_output.put_line(n3 || ',' || n4);
end;
/

解决方案 »

  1.   

    记得是只能in或者out,不能声明两种楼主应该到oracle版去发
      

  2.   


    可以同时声明两个好像..这也是java开发必备知识..
      

  3.   

    declare
    n1 number;
    n2 number;
    n3 number;
    n4 number;
    begin
    n1 := 3;
    n2 := 4;
    n4 := 5;
    p(n1, n2, n3, n4);
    dbms_output.put_line('ok');
    dbms_output.put_line(n3 || ',' || n4);
    end;
    这样应该可以了  我测试过
      

  4.   


    PL/SQL 过程已成功完成.
    这是不错,但是输出的那些语句呢??
    到哪去了..还是不对
      

  5.   


    对,我也测了,put_line是输出到out put 选项卡
    在sql选项卡的右面点一下就可以看结果了。
      

  6.   


    sun哥别忙着说可以.帮我看下测试语句哪里错了?
      

  7.   


    不懂.
    我sqlplus用的是命令行的.
    dbms_output.put_line不是直接输出到命令行上吗
      

  8.   

    不需要execute 那是sqlserver 的用法
    引用变量不用:
    n2即可,
    另外测试存储过程可以在存储过程名称上面点击右键菜单 test
      

  9.   

    其他的明白了,但是这句:另外测试存储过程可以在存储过程名称上面点击右键菜单 test不明白.是哪个开发工具?我用的是最土的命令行窗口操纵数据库的..
      

  10.   

    我不是dba。平时都是开发用,所以从来不用sqlplus
    我用PL/Sql developer
    很好用,倒xml,html,跟踪调试存储过程,导出导入,格式化,等等,很强。太多功能了。
      

  11.   

    我在sqlplus 下试了,确实没输出,没用过sqlplus 刚才还是第一次,请赐教为何无输出。
      

  12.   

    用道理  在PLSQL上运行 结果就出来了
      

  13.   

    set serveroutput on;declare
    n1 number;
    n2 number;
    n3 number;
    n4 number;
    begin
        n1 := 3;
        n2 := 4;
        n4 := 5;  
        p(n1, n2, n3, n4);
        dbms_output.put_line('ok');
        dbms_output.put_line(n3 || ',' || n4);
    end;这样就可以了
    要想执行输出
    首先要打开服务器的输出显示
    用set serveroutput on;
      

  14.   

    declare
    n1 number;
    n2 number;
    n3 number;
    n4 number;
    begin
    n1 := 3;
    n2 := 4;
    n4 := 5;
    p(n1, n2, n3, n4);
    dbms_output.put_line('ok');
    dbms_output.put_line(n3 || ',' || n4);
    end;就像上面说的  你语法错了知道不  如果想在命令行的形式下输出需要打开set serveroutput on才好使滴