2009-12-18 4 views
7

Après de nombreuses recherches Google et SO, je ne trouve pas de réponse définitive à cette question simple:Quelle est la syntaxe pour définir une procédure Oracle dans une autre procédure stockée?

Comment puis-je définir une procédure dans une autre procédure à utiliser?

Je sais qu'il y a des blocs imbriqués et des procédures imbriquées, mais je n'ai pas vu la syntaxe exacte pour ce que je veux. à savoir

create or replace 
PROCEDURE TOP_PROCEDURE 
(...) 
IS 
-- nested procedure here? 
BEGIN 
    NULL; 
END; 
+1

La réponse de Tony est sur, mais je dois vous demander pourquoi vous voulez faire cela. J'ai vu des procédures imbriquées utilisées, mais je ne les ai jamais vues bien utilisées. En d'autres termes, il est presque toujours préférable de placer la procédure dans un package (si ce n'est déjà fait dans un package) et de créer des méthodes privées dans le package pour les procédures imbriquées. Sinon, il devient plutôt déroutant de suivre le code et conduit à la pratique plutôt médiocre de faire en sorte que toutes les variables locales de TOP_PROCEDURE soient des variables globales dans le contexte des procédures imbriquées. –

+1

J'utilise assez souvent des procédures imbriquées - généralement pour de petites fonctions très spécifiques à leur procédure parente (c'est-à-dire qu'elles n'ont aucun sens d'être appelées par quoi que ce soit d'autre), sinon je répète le même code plus que une fois dans la procédure parent. –

+0

Votre point est définitivement valide Justin, mais en vérité, je l'utilise juste comme le spécifie Jeffrey. C'était aussi vraiment une question de curiosité. C'est un moyen rapide de refactoriser mon code. – daveslab

Répondre

15
create or replace 
PROCEDURE TOP_PROCEDURE 
(...) 
IS 
    variable NUMBER; 
    PROCEDURE nested_procedure (...) 
    IS 
    BEGIN 
    NULL; 
    END; 
    PROCEDURE another_nested_procedure (...) 
    IS 
    BEGIN 
    NULL; 
    END; 
BEGIN 
    NULL; 
END; 

procédures locales doivent être déclarées après quoi que ce soit d'autre (par exemple des variables).

+0

Réponse simple et rapide. Impressionnant. – daveslab

Questions connexes