Oracle
 sql >> Base de données >  >> RDS >> Oracle

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

Vos procédures stockées fonctionnent comme codées. Le problème est avec la dernière ligne, elle ne peut invoquer aucune de vos procédures stockées.

Trois choix dans SQL*Plus sont :call , exec , et un bloc PL/SQL anonyme.

call semble être un mot-clé SQL et est documenté dans la référence SQL. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Le diagramme de syntaxe indique que les parenthèses sont requises, même lorsqu'aucun argument n'est transmis à la routine d'appel.

CALL test_sp_1();

Un bloc PL/SQL anonyme est un PL/SQL qui ne se trouve pas dans une procédure, une fonction, un déclencheur, etc. nommés. Il peut être utilisé pour appeler votre procédure.

BEGIN
    test_sp_1;
END;
/

Exec est une commande SQL*Plus qui est un raccourci pour le bloc anonyme ci-dessus. EXEC <procedure_name> sera transmis au serveur de base de données en tant que BEGIN <procedure_name>; END;

Exemple complet :

SQL> SET SERVEROUTPUT ON
SQL> CREATE OR REPLACE PROCEDURE test_sp 
  2  AS 
  3  BEGIN 
  4      DBMS_OUTPUT.PUT_LINE('Test works'); 
  5  END;
  6  /

Procedure created.

SQL> CREATE OR REPLACE PROCEDURE test_sp_1 
  2  AS
  3  BEGIN
  4      DBMS_OUTPUT.PUT_LINE('Testing'); 
  5      test_sp; 
  6  END;
  7  /

Procedure created.

SQL> CALL test_sp_1();
Testing
Test works

Call completed.

SQL> exec test_sp_1
Testing
Test works

PL/SQL procedure successfully completed.

SQL> begin
  2      test_sp_1;
  3  end;
  4  /
Testing
Test works

PL/SQL procedure successfully completed.

SQL>