Maison >base de données >tutoriel mysql >Comment puis-je appeler une procédure stockée Oracle depuis une autre ?

Comment puis-je appeler une procédure stockée Oracle depuis une autre ?

DDD
DDDoriginal
2024-12-24 15:20:11667parcourir

How Can I Call One Oracle Stored Procedure from Within Another?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn