Appel d'une procédure stockée avec un autre Oracle
Personne ne sait d'une façon, ou même si ses possible, pour appeler une procédure stockée à partir d'une autre? Si oui, comment le 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;
Vous devez vous connecter pour publier un commentaire.
Vos procédures stockées travail codé. Le problème est avec la dernière ligne, il est impossible d'invoquer l'une de vos procédures stockées.
Trois choix dans SQL*Plus sont:
call
,exec
, et un anoymous PL/SQL bloc.call
semble être un mot clé SQL, et est documenté dans le SQL de Référence. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Le diagramme de syntaxe indique que parentesis sont tenus, même après les arguments sont passés à l'appel de la routine.Anonyme PL/SQL bloc PL/SQL qui n'est pas à l'intérieur d'une procédure nommée, la fonction de déclenchement, etc. Il peut être utilisé pour appeler votre procédure.
Exec
est un SQL*Plus de commande qui est un raccourci pour le bloc anonyme.EXEC <procedure_name>
sera transmis au serveur de base de données commeBEGIN <procedure_name>; END;
Exemple complet:
Sûr, vous appelez ça de l'intérieur du PS, il n'y a pas de syntaxe particulière.
Ex:
Si la procédure est dans un schéma différent de celui que l'exécution de la procédure, vous avez besoin de le préfixer avec le nom du schéma.
EXEC
ouEXECUTE
, comme (je pense) serait nécessaire d'invoquer la procédure de manière indépendante, mais qu'il était d'avoir une erreur. Je ne savais pas que l'intérieur d'une autre procédure, j'ai juste l'appel de la procédure par nom, sans une commande précédente.D'invoquer la procédure à partir de la ligne de commande SQLPlus, essayez l'une de ces:
@Michael Lockwood - vous n'avez pas besoin d'utiliser le mot "APPEL" n'importe où. Vous avez juste besoin de mentionner la procédure de l'appeler directement.
Qui est
au lieu de
D'appeler une procédure à partir d'une autre procédure:
Un pour une procédure normale:
Procédure d'appel SP_1 de SP_2:
Appeler une procédure avec REFCURSOR ou curseur de sortie:
Appel de la procédure SP_1 qui sera de retour le REFCURSOR comme paramètre de sortie