IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[PL/SQL] Procédures imbriquées


Sujet :

Oracle

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut [PL/SQL] Procédures imbriquées
    Bonjour,

    j'utilise dans mon projet 2 procédures qui sont imbriquées.
    La procedure1(...) appelle la procedure2(...).

    Je voudrais que la procedure2 ne puisse être lancée que par la procedure1. On ne pourrait pas faire directement Exec procedure2(...)

    Est-ce possible ?

    Merci et bonne journée

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Dans ce cas pourquoi ne pas la créer dans la procédure 1 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create or replace procedure1 as
     
       procedure procedure2 as
       begin
         ...
       end;
     
    begin
      ...
      procedure2;
      ...
    end;
    /
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    Citation Envoyé par plaineR
    Dans ce cas pourquoi ne pas la créer dans la procédure 1 ?
    Chacune des 2 procédures contient un grand nombre de lignes.
    Je souhaite donc séparer le code des 2 procedures pour faciliter leur maintenance.

  4. #4
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Citation Envoyé par dcollart
    Bonjour,
    Je voudrais que la procedure2 ne puisse être lancée que par la procedure1. On ne pourrait pas faire directement Exec procedure2(...)

    Est-ce possible ?

    Merci et bonne journée
    Oui par :
    execute sous sqlserver.
    call sous oracle et mysql5.
    Plus nombreux sont les problèmes auxquels on réfléchit , plus on risque de n'en comprendre aucun .
    Pas de questions techniques en privé

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    Citation Envoyé par karami
    Oui par :
    execute sous sqlserver.
    call sous oracle et mysql5.
    Je ne comprends pas la solution proposée. Je ne cherche pas à exécuter procedure2 mais en interdire son lancement sauf si c'est demandé par la procedure1.

    Puis-je avoir quelques précisions ?

    Merci et bonne journée.

  6. #6
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    J'ai cru que la longueur du code qui te fait probleme, si tu veux l'interdire je croix que la solution de plaineR fera l'affaire.
    Plus nombreux sont les problèmes auxquels on réfléchit , plus on risque de n'en comprendre aucun .
    Pas de questions techniques en privé

  7. #7
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Citation Envoyé par dcollart
    Bonjour,



    Je ne comprends pas la solution proposée. Je ne cherche pas à exécuter procedure2 mais en interdire son lancement sauf si c'est demandé par la procedure1.

    Puis-je avoir quelques précisions ?

    Merci et bonne journée.
    Dans Quel Cas Procedure2 pourait il estre lancé en directe sans passé par procedure1 ?
    Signé : Capitaine Jean-Luc Picard

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par karami
    Oui par :
    execute sous sqlserver.
    call sous oracle et mysql5.
    ça n'empêche pas de faire un call procedure2

  9. #9
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Citation Envoyé par argoet
    Dans Quel Cas Procedure2 pourait il estre lancé en directe sans passé par procedure1 ?
    Je croix pas qu'il y'a de cas,puisqu'il dit :
    Chacune des 2 procédures contient un grand nombre de lignes.
    Je souhaite donc séparer le code des 2 procedures pour faciliter leur maintenance.
    Plus nombreux sont les problèmes auxquels on réfléchit , plus on risque de n'en comprendre aucun .
    Pas de questions techniques en privé

  10. #10
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Je ne vois pas trop d'interet à cela :
    mais pourquoi pas !!! :

    Rajouter un parametre d'entrée à procedure2 (exemple prg_origine)

    Apeler procedure2(avec prg_origine='prc1') dans procedure1

    et tester dans procedure2 si prg_origine='prc1' Si oui on continue , sinon on stop ou erreur : la c'est vous qui voyez
    Signé : Capitaine Jean-Luc Picard

  11. #11
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    En inspirant de ce post tu dois pouvoir t'en sortir :
    http://www.developpez.net/forums/showthread.php?t=90694
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  12. #12
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Bonjour

    Je pense que c'est un cas où on peut jouer sur la visibilité au sein d'un paquetage que nous appellerons PQ.
    Vous rendez P1 publique en la déclarant dans l'en-tête du paquetage (plus dans le corps bien sûr), et vous rendez P2 privée en ne la déclarant que dans le corps du paquetage.

    Depuis l'extérieur, vous pourrez faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC PQ.P1(param1, param2...);
    mais pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC PQ.P2(param1, param2...);
    puisque P2 n'est pas visible, et ne peut être appelée que depuis le paquetage.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  13. #13
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par argoet
    Rajouter un parametre d'entrée à procedure2 (exemple prg_origine)
    Sauf que si tu positionnes sous SQL*Plus le paramètre à procedure1 tu passes outre la restriction
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  14. #14
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Citation Envoyé par plaineR
    Sauf que si tu positionnes sous SQL*Plus le paramètre à procedure1 tu passes outre la restriction
    Absolument PlaineR : et c'est pourquoi j'ai commencé mon poste par
    Citation Envoyé par argoet
    Je ne vois pas trop d'interet à cela :
    mais pourquoi pas !!! :
    Concernant la réponse de Pomalaix : ça semble répondre completement au besoin
    Signé : Capitaine Jean-Luc Picard

  15. #15
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    +1

    C'est pour moi la meilleur technique

    Citation Envoyé par Pomalaix
    Bonjour

    Je pense que c'est un cas où on peut jouer sur la visibilité au sein d'un paquetage que nous appellerons PQ.
    Vous rendez P1 publique en la déclarant dans l'en-tête du paquetage (plus dans le corps bien sûr), et vous rendez P2 privée en ne la déclarant que dans le corps du paquetage.

    Depuis l'extérieur, vous pourrez faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC PQ.P1(param1, param2...);
    mais pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC PQ.P2(param1, param2...);
    puisque P2 n'est pas visible, et ne peut être appelée que depuis le paquetage.

  16. #16
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par aline
    +1

    C'est pour moi la meilleur technique
    Pour moi aussi ! ... à condition qu'il veuille/puisse créer ses procédures dans un package (ce qui n'est pas évident, puisqu'il ne veut pas créer sa procédure2 comme sous-procédure de sa procédure1)
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  17. #17
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    finalement, j'ai suivi vos conseils. J'ai donc créé un PACKAGE....

    Merci encore à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PL/SQL]requête imbriquée
    Par Nadine dans le forum Oracle
    Réponses: 6
    Dernier message: 01/02/2005, 16h21
  2. [PL/SQL] Procédure renvoyant un curseur.
    Par KalHadj-Nikov dans le forum Oracle
    Réponses: 3
    Dernier message: 17/12/2004, 15h10
  3. [PL/SQL]Procédure qui ne se finit pas...
    Par tscoops dans le forum Oracle
    Réponses: 8
    Dernier message: 13/12/2004, 15h53
  4. Réponses: 4
    Dernier message: 07/12/2004, 08h11
  5. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo