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
Libérer: 2024-12-24 15:20:11
original
673 Les gens l'ont consulté

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;
Copier après la connexion

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>);
Copier après la connexion

Placez le nom de la procédure entre parenthèses, même lorsqu'aucun argument n'est transmis.

CALL test_sp_1();
Copier après la connexion

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;
/
Copier après la connexion

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;
Copier après la connexion

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
Copier après la connexion

Sortie :

Testing
Test works
Testing
Test works
Testing
Test works
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal