Oracle存储过程OUT参数

时间:2009-05-21 10:11:44

标签: oracle stored-procedures plsql

我有一个存储过程,其IN OUT参数声明如下:

create or replace PROCEDURE RIFATT_SEGN0_INS(pIdRifattSegn0  in  OUT NUMBER,
                           pNumDossier IN VARCHAR2 ,
                           pNumConsegna IN NUMBER,
                           pDtConsegna IN DATE,
[..]

)  AS
[..]

每当我从另一个程序调用它时,我如何得到也出来的pIdRifattSegn0参数?

2 个答案:

答案 0 :(得分:14)

你的问题并不完全清楚。正如其名称所暗示的那样,IN OUT参数双向传递。这意味着它必须传递一个变量,而不是文字,你需要一个声明块来做到这一点。例如:

declare
  l_segn number;
begin
  l_segn := 1;
  -- procedure will have received value = 1
  rifatt_segn0_ins(l_segn, 'x', 2, sysdate);
  -- procedure may have changed value of l_segn from 1 to something else
  dbms_output.put_line(l_segn); 
end;

答案 1 :(得分:2)

以下是一个例子:

SQL> create or replace PROCEDURE RIFATT_SEGN0_INS
  2  ( pIdRifattSegn0 IN OUT NUMBER
  3  , pNumDossier    IN     VARCHAR2
  4  , pNumConsegna   IN     NUMBER
  5  , pDtConsegna    IN     DATE
  6  )
  7  as
  8  begin
  9    dbms_output.put_line(pNumDossier);
 10    dbms_output.put_line(to_char(pNumConsegna));
 11    dbms_output.put_line(to_char(pDtConsegna,'yyyy-mm-dd'));
 12    pIdRifattSegn0 := sqrt(pIdRifattSegn0);
 13  end;
 14  /

Procedure is aangemaakt.

SQL> create or replace procedure another_procedure
  2  as
  3    l_IdRifattSegn0 number := 4;
  4  begin
  5    rifatt_segn0_ins
  6    ( pIdRifattSegn0 => l_IdRifattSegn0
  7    , pNumDossier    => '1A'
  8    , pNumConsegna   => 42
  9    , pDtConsegna    => sysdate
 10    );
 11    dbms_output.put_line('from another_procedure: l_IdRifattSegn0 = ' || to_char(l_IdRifattSegn0));
 12  end;
 13  /

Procedure is aangemaakt.

SQL> exec another_procedure
1A
42
2009-05-21
from another_procedure: l_IdRifattSegn0 = 2

PL/SQL-procedure is geslaagd.

此致 罗布。