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

DB2 Discussion :

Function: Requete SQL avec variable


Sujet :

DB2

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2020
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Function: Requete SQL avec variable
    Bonjours à tous,

    Je découvre petit à petit DB2 sur AS400 et je m'essaye aux fonctions utilisateurs (UDF).
    Mais j'ai bien sur un premier "gros" problème:
    Nous travaillons avec 2 bibliothèques: une de développement et une de production.
    En phase de développement, on écrit nos requetes ainsi: "SELECT * FROM LIBDEV/MYTABLE..." et bien sur lorsque l'on bascule en Prod, il faut changer partout le nom de la bibliothèque.
    Je trouve cela un peu contraignant et en créant mes premières fonctions, je me dis que je pourrais passer un paramètre à la fonction qui indiquerait quelle bibliothèque utiliser.
    Voici ce que j'aimerais faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE FUNCTION MYBIB/MYFONCTION (            
         BIBLIO     CHAR(10) DEFAULT 'LIBDEV' 
    ) 
     
    BEGIN
         CASE WHEN BIBLIO = 'P' THEN SET BIBLIO = 'LIBPROD' ELSE SET BIBLIO ='LIBDEV' END CASE;
         SELECT * FROM BIBLIO/MYTABLE
    END
    L'idée c'est que dans la requete "SELECT * FROM BIBLIO/MYTABLE", BIBLIO soit remplacé par 'LIBPROD' ou 'LIBDEV' suivant le paramètre transmis.
    Mais cela ne marche pas.
    Avant j'ai essayé d'ajouter la commande "USE BIBLIO", mais cela n'existe pas en DB2.

    Est ce que vous auriez des idées à me proposer pour régler ce problème. Peut être que j'utilise mal l'envirronement AS400<>DB2 et qu'il faut revoir tout notre organisation de bibliothèque.
    Merci pour votre aide et vos retours d'expérience.

    Marc

  2. #2
    Membre actif
    Homme Profil pro
    Architecte technique & logiciel IBM i
    Inscrit en
    Septembre 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique & logiciel IBM i
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2010
    Messages : 179
    Points : 275
    Points
    275
    Par défaut
    Bonjour.
    Je suis sur IBM i et nous sommes dans le même cas : des bibliothèques différentes.

    Lorsque nous faisons des fonctions ou des procédures SQL, nous ne qualifions jamais rien (ni la fonction elle-même, ni les tables lues).
    C'est lorsqu'elle est créée qu'on se met en mode *SYS (sur IBM i, c'est un paramètre du RUNSQL ou RUNSQLSTM) pour permettre l'utilisation de la liste de bibliothèques et nom une bibliothèque courante. N'oublions pas qu'une fonction ou qu'une procédure se copie ou se restaure d'une bibliothèque à une autre ou d'un système à un autre, c'est aussi ce qui permet de se passer de la qualification).

    Et pareil lors de l'exécution : elle tient compte de la liste de bibliothèques si on reste en mode *SYS (option naming = *SYS).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2020
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse.

    C'est ce que j'avais commencé à faire, mais c'est un tel bazar dans les bibliothèques avec les profils de développement (en prod, c'est mieux), qu'il y a toujours un risque d'utiliser un mauvais fichier.
    Mais, je suis d'accord avec toi, je vais préconiser cette solution.

    Sinon, il n'y a vraiment pas d'équivalent à USE, qui pemet d'indiquer la base de données par défaut dans un script SQL ?
    J'ai regardé la notion de SCHEMA.
    En tapant "values current schema" j'obtiens *LIBL, mais je ne sais pas comment créer un nouveau schema avec une liste de bibliothèque différente


    Encore Merci

    Marc

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    il y a fort longtemps que je ne suis pas intervenu chez un client AS400 (system i) mais sur DB2 for Z/OS le schema est LA solution
    On ne code jamais en dur le schéma des requêtes ainsi la requête reste identique quelque soit l'environnement et la plate forme dans lequel elle est exécutée.
    Le schema est mis une fois pour toutes à l'exécution, soit par un "set current schema" avant d'exécuter les requêtes, soit grâce aux paramètres de lancement du job

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2020
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup pour ton retour d'expérience, je vais creuser cela sérieusement.

    Marc

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 767
    Points : 10 764
    Points
    10 764
    Par défaut
    Bonjour comme dit plus haut, la solution c'est le schema. Donc bien gérer la liste des bibliothèques entre environnements. Je ne qualifie dès lors jamais le schéma de mes tables et les livraisons sont fluides entre environnements.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 767
    Points : 10 764
    Points
    10 764
    Par défaut
    Citation Envoyé par bolm2 Voir le message
    Mais j'ai bien sur un premier "gros" problème:
    Nous travaillons avec 2 bibliothèques: une de développement et une de production.
    En phase de développement, on écrit nos requetes ainsi: "SELECT * FROM LIBDEV/MYTABLE..." et bien sur lorsque l'on bascule en Prod, il faut changer partout le nom de la bibliothèque.
    Marc
    Pour faire du SQL dynamique avec tes environnements (peu élégant avec une gestion pénible des quote) il faudrait une instruction "prepare" (dans une chaîne de caractère tu créées ton instruction) et ensuite l'exécution de l'ordre.

  8. #8
    Membre actif
    Homme Profil pro
    Architecte technique & logiciel IBM i
    Inscrit en
    Septembre 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique & logiciel IBM i
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2010
    Messages : 179
    Points : 275
    Points
    275
    Par défaut
    Sur l'IBM i, il n'y a qu'une base de donnée et on s'y connecte automatiquement.
    Et la notion de schéma correspond pratiquement à une notion "bibliothèque". Donc le set current schema met la bibliothèque en *CURLIB sur le travail. Ca fonctionne si les données sont dans une seule bibliothèque. Par exemple dans mon cas, on trouve des données dans au moins 6 bibliothèques en ligne, donc il faut forcément que je passe par la *LIBL et non par un current schema.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 767
    Points : 10 764
    Points
    10 764
    Par défaut
    En fait il n'y a rien à préciser si l'ordre des LIB est correctement paramétré dans l'environnement. Il faut pouvoir faire un select * from table dans n'importe quel environnement.

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par pwrdwnsys Voir le message
    Sur l'IBM i, il n'y a qu'une base de donnée et on s'y connecte automatiquement.
    Et la notion de schéma correspond pratiquement à une notion "bibliothèque". Donc le set current schema met la bibliothèque en *CURLIB sur le travail. Ca fonctionne si les données sont dans une seule bibliothèque. Par exemple dans mon cas, on trouve des données dans au moins 6 bibliothèques en ligne, donc il faut forcément que je passe par la *LIBL et non par un current schema.
    Là encore, je ne me prononcerai pas sur la solution DB2i pour ne l'avoir plus fréquenté depuis bien longtemps.
    Sur Z/OS, ceci n'est pas un problème, il suffit de créer autant d'alias que nécessaire pour ne voir qu'un seul schéma

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2020
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Merci à vous pour vos conseils.

    Je suis d'accord avec la plupart d'entre vous, il faut éviter le nom des biblios dans les scripts et utiliser le schema et dans mon cas, l'ordre des bibliothèques dans *LIBL.

    et dans mon cas, il s'agit plus de mauvaises habitudes de travail qu'il faudrait changer.

    Cordialement,

    Marc

Discussions similaires

  1. [AC-2007] Requete SQL avec variables
    Par Greg47 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/05/2010, 19h07
  2. Requete SQl avec variable d'un combobox
    Par nonopower dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 15/03/2010, 17h08
  3. requete sql avec variable feuil-range
    Par jokenjo dans le forum Excel
    Réponses: 6
    Dernier message: 18/03/2008, 15h47
  4. requete sql avec variable
    Par stefon dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/08/2006, 16h29
  5. requete sql avec variable
    Par Mihalis dans le forum Bases de données
    Réponses: 15
    Dernier message: 07/04/2006, 10h17

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