2009-05-21 6 views
3

I ont une procédure stockée avec un paramètre IN OUT déclaré comme suit:paramètres Oracle procédure stockée OUT

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

) AS 
[..] 

Chaque fois que je l'appelle d'une autre procédure, comment puis-je obtenir le paramètre pIdRifattSegn0 qui est aussi?

Répondre

13

Votre question n'est pas entièrement claire. Un paramètre IN OUT est passé dans les deux sens, comme son nom l'indique. Cela signifie qu'il doit être passé une variable, pas un littéral et vous avez besoin d'un bloc declare pour le faire. Par exemple:

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; 
2

est un exemple:

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. 

Cordialement, Rob .

Questions connexes