Appel de procédures stockées depuis d'autres dans Oracle
Dans Oracle, on peut rencontrer un scénario dans lequel il est nécessaire d'invoquer une procédure stockée depuis dans un autre. Ceci peut être réalisé en utilisant diverses méthodes, que nous explorerons dans cet article.
Cas de test
Considérez le code de test suivant :
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;
Problème et solution
Le problème avec le code donné réside dans la dernière ligne, qui tente de directement invoquer les procédures stockées. Ce problème peut être résolu en utilisant l'une des trois méthodes suivantes :
1. Syntaxe d'appel
La référence SQL d'Oracle définit la syntaxe d'appel des procédures stockées comme suit :
CALL <procedure_name>(<argument_list>);
Placez le nom de la procédure entre parenthèses, même lorsqu'aucun argument n'est transmis.
CALL test_sp_1();
2. Bloc PL/SQL anonyme
Dans un bloc PL/SQL anonyme, on peut appeler des procédures stockées sans les nommer explicitement.
BEGIN test_sp_1; END; /
3. Commande Exec (SQL*Plus)
SQL*Plus fournit la commande exec comme raccourci pour les blocs anonymes. Il exécute la procédure stockée spécifiée comme si elle faisait partie d'un bloc anonyme.
EXEC test_sp_1;
Exemple
Voici un exemple entièrement fonctionnel :
SET SERVEROUTPUT ON; CREATE OR REPLACE PROCEDURE test_sp AS BEGIN DBMS_OUTPUT.PUT_LINE('Test works'); END; / CREATE OR REPLACE PROCEDURE test_sp_1 AS BEGIN DBMS_OUTPUT.PUT_LINE('Testing'); test_sp; END; / CALL test_sp_1(); -- Direct call exec test_sp_1; -- SQL*Plus shortcut BEGIN test_sp_1; END; -- Anonymous PL/SQL block
Sortie :
Testing Test works Testing Test works Testing Test works
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!