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>