create or replace procedure(v_str1 in varchar2,v_str2 out varchar2) as
...调用的时候,传入两个变量,第一个是传入的参数,第二个是存放返回的数据。

解决方案 »

  1.   

    参数中 使用out a char(1)
    过程执行后就可以用a的值
      

  2.   

    16:51:14 SQL> create or replace procedure test(a in number,b out number)
    16:51:27   2  as
    16:51:27   3  begin
    16:51:27   4    dbms_output.put_line(a);
    16:51:27   5    b:=a*2;
    16:51:27   6  end;
    16:51:27   7  /过程已创建。已用时间:  00: 00: 00.15
    16:51:28 SQL> variable b number
    16:51:37 SQL> exec test(5,:b)PL/SQL 过程已成功完成。已用时间:  00: 00: 00.15
    16:51:46 SQL> select :b from dual;        :B
    ----------
            10已用时间:  00: 00: 00.00
      

  3.   

    16:48:53 SQL> create or replace procedure p_demo(v_in in varchar2,v_out out varchar2) as
    16:49:02   2  begin
    16:49:03   3  if v_in > '10' then
    16:49:03   4     v_out:=v_in||'>10';
    16:49:03   5  else
    16:49:03   6     v_out:=v_in||'<=10';
    16:49:03   7  end if;
    16:49:03   8  end p_demo;
    16:49:03   9  /过程已创建。已用时间:  00: 00: 00.13
    16:49:04 SQL> set serveroutput on;
    16:50:11 SQL> declare
    16:50:20   2  v_return varchar2(20);
    16:50:27   3  begin
    16:50:32   4  p_demo('5',v_return);
    16:50:36   5  dbms_output.put_line(v_return);
    16:50:40   6  P_demo('15',v_return);
    16:50:44   7  dbms_output.put_line(v_return);
    16:50:46   8  end;
    16:50:50   9  /
    5>10
    15>10PL/SQL 过程已成功完成。已用时间:  00: 00: 00.31
    16:50:51 SQL>
      

  4.   

    随便一写,处理上有问题,应该传入number,
    :)
      

  5.   

    呵呵,是我没说明白。
    我是希望过程执行过程中遇到某中情况时直接退出,不再执行后面的代码。
    我现在是用raise_application_error退出的,可这样没办法得到返回值(返回值有多个)。
      

  6.   

    17:21:44 SQL> create or replace procedure p_demo
    17:21:54   2  (v_in number,v_out1 out varchar2,v_out2 out varchar2) as
    17:22:01   3  v_err1  exception;
    17:22:09   4  v_err2  exception;
    17:22:09   5  begin
    17:22:09   6    if v_in<10 then
    17:22:09   7      raise v_err1;
    17:22:09   8    end if;
    17:22:09   9    if v_in>10 and v_in<100 then
    17:22:09  10      v_out1:='ok';
    17:22:09  11      v_out2:='true';
    17:22:09  12    end if;
    17:22:09  13    if v_in>100 then
    17:22:09  14      raise v_err2;
    17:22:09  15    end if;
    17:22:09  16  exception 
    17:22:09  17    when v_err1 then
    17:22:09  18      v_out1:='<10';
    17:22:09  19      v_out2:='false';
    17:22:09  20    when v_err2 then
    17:22:09  21      v_out1:='>100';
    17:22:09  22       v_out2:='false';
    17:22:09  23  end p_demo;
    17:22:09  24  /过程已创建。
    17:23:29 SQL> set serveroutput on
    17:23:39 SQL> declare
    17:23:42   2  out1 varchar2(10);
    17:23:42   3  out2 varchar2(20);
    17:23:42   4  begin
    17:23:42   5  p_demo(5,out1,out2);
    17:23:42   6  dbms_output.put_line(out1||chr(10)||chr(13)||out2);
    17:23:46   7  end;
    17:23:47   8  /
    <10falsePL/SQL 过程已成功完成。已用时间:  00: 00: 00.47
    17:23:47 SQL>