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

PL/SQL Oracle Discussion :

Ne pas répéter le nom de package à chaque appel de fonction


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 137
    Par défaut Ne pas répéter le nom de package à chaque appel de fonction
    Bonjour,

    Je rédige actuellement des scripts SQL qui s'appuient sur les fonctions et types définis dans un package.
    A chaque référence à l'un de ses objets, je dois l'identifier en mentionnant le nom du package.
    Malheureusement, les conventions de nommage en vigueur sur ce projet font que le nom du package est relativement long (16 caractères) et sa répétition rend les programmes lourds à lire et à comprendre.

    Je me demandais donc s'il y existait un moyen de se dispenser de cette répétition, un équivalent de l'instruction namespace utilisée en C.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  2. #2
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    A priori ce ne serait pas possible si j'en juge par la doc Oracle : toute fonction d'un package doit être préfixée par le nom de ce package.

    Néanmoins il y a une exception dans Oracle, le package STANDARD (à ne pas confondre avec DBMS_STANDARD).
    J'avais fait un article sur mon blog ici mais cela ne concerne pas ton problème : http://dbaoraclesql.canalblog.com/ar.../36228853.html

    Ce package comprend les fonctions basiques comme COMMIT, TO_CHAR... et on peut utiliser celles-ci SANS préfixer par le nom du package.
    Comment fait Oracle? Mystère...

    A noter qu'au niveau des synonymes, il n'en existe aucun pour STANDARD.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> select owner, SYNONYM_NAME, TABLE_OWNER, TABLE_NAME from dba_synonyms where SYNONYM_NAME like '%STANDARD%' order by OWNER, SYNONYM_NAME;
                        OWNER       SYNONYM_NAME    TABLE_OWNE    TABLE_NAME
              ---------- --------------- ---------- ---------------
              PUBLIC      DBMS_STANDARD   SYS          DBMS_STANDARD
    Ce qui est bizarre d'ailleurs car pour appeler les fonctions de ce package, on peut les préfixer ou non par le nom du package et même du propriétaire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
              SQL> select nvl(NULL, 'OK') from dual;
              NV
              --
              OK
     
              SQL> select standard.nvl(NULL, 'OK') from dual;
              STANDARD.NVL(NULL,'OK')
              -----------------------
              OK
     
              SQL> select sys.standard.nvl(NULL, 'OK') from dual;
              SYS.STANDARD.NVL(NULL,'OK')
              ---------------------------
              OK

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Une manière détournée pourrait être la création de synonymes avec des noms courts

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 137
    Par défaut
    J'y avais pensé mais ça m'a été refusé.
    Après, c'est juste cosmétique ; ça ne changera rien à l'exécution du code.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Une idée pour les functions serait de les déclarer dans une clause with:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SQL> with
      2  function rnd(n number) return number as begin return dbms_random.value(1,n); end;
      3  select rnd(3)from dual;
      4  /
     
     
        RND(3)
    ----------
    2.19515193
    mis ça marche pas pour les types.

    Le concept de namespace, comme les synonymes, serait compliqué car la base doit gérer les dépendences. Exemple: package AAA avec une fonction BBB. Default namespace AAA. requête qui l'utilise. Que doit-il se passer si je crée une fonction qui s'appelle AAA? Tout d'un coup la requête ne fait plus la même chose.



    Malheureusement, les conventions de nommage en vigueur sur ce projet font que le nom du package est relativement long (16 caractères)
    S'il y a autre chose dans le nom du package que le nom utile du package (genre code pour l'appli, le module, la version, le client, ou je ne sais quoi...) alors il faut peut-être utiliser différents schemas pour cette séparation logique, et les schemas qui l'utilisent auraient un synonyme dessus.

Discussions similaires

  1. Variable qui change de valeur à chaque appel de fonction
    Par bpascal123 dans le forum Débuter
    Réponses: 5
    Dernier message: 12/03/2010, 11h47
  2. SSIS Nom de package pas mis a jour
    Par geof dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/11/2007, 18h00
  3. Récupérer le nom du fichier qui appelle une fonction
    Par DeezerD dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2007, 14h37
  4. pour ne pas répéter where plusieurs fois
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 06/06/2005, 10h31
  5. Ne pas répéter une image de fond
    Par valette dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 05/01/2005, 21h49

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