43 votes

Appeler une procédure stockée avec une autre dans Oracle

Est-ce que quelqu'un connaît un moyen, ou même si c'est possible, d'appeler une procédure stockée depuis une autre ? Si oui, comment feriez-vous ?

Voici mon code de test :

 SET SERVEROUTPUT ON;

DROP PROCEDURE test_sp_1;
DROP PROCEDURE test_sp;

CREATE PROCEDURE test_sp
AS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Test works');
END;
/

CREATE PROCEDURE test_sp_1
AS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Testing');
    test_sp;
END;
/

CALL test_sp_1;

19voto

dcp Points 26928

Bien sûr, vous l'appelez simplement depuis le SP, il n'y a pas de syntaxe particulière.

Ex:

    PROCEDURE some_sp
   AS
   BEGIN
      some_other_sp('parm1', 10, 20.42);
   END;

Si la procédure est dans un schéma différent de celui dans lequel se trouve la procédure d'exécution, vous devez la préfixer avec le nom du schéma.

    PROCEDURE some_sp
   AS
   BEGIN
      other_schema.some_other_sp('parm1', 10, 20.42);
   END;

3voto

Rajesh Chamarthi Points 8847

@Michael Lockwood - vous n'avez pas besoin d'utiliser le mot-clé "CALL" n'importe où. Il suffit de mentionner directement l'appel de procédure.

C'est-à-dire

 Begin
   proc1(input1, input2);
end;
/

à la place de

 Begin
   call proc1(input1, input2);
end;
/

2voto

Dave Costa Points 25282

Pour appeler la procédure à partir de la ligne de commande SQLPlus, essayez l'une d'entre elles :

 CALL test_sp_1();
EXEC test_sp_1

2voto

Nirav savla Points 31

Appel d'une procédure depuis une autre procédure :

Un pour une procédure normale :

 CREATE OR REPLACE SP_1() AS 
BEGIN
/*  BODY */
END SP_1;

Appel de la procédure SP_1 depuis SP_2 :

 CREATE OR REPLACE SP_2() AS
BEGIN
/* CALL PROCEDURE SP_1 */
SP_1();
END SP_2;

Appelez une procédure avec REFCURSOR ou curseur de sortie :

 CREATE OR REPLACE SP_1
(
oCurSp1 OUT SYS_REFCURSOR
) AS
BEGIN
/*BODY */
END SP_1;

Appelez la procédure SP_1 qui renverra le REFCURSOR en paramètre de sortie

 CREATE OR REPLACE SP_2 
(
oCurSp2 OUT SYS_REFCURSOR
) AS `enter code here`
BEGIN
/* CALL PROCEDURE SP_1 WITH REF CURSOR AS OUTPUT PARAMETER */
SP_1(oCurSp2);
END SP_2;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X