1. #1
    Invité régulier
    Inscrit en
    octobre 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : octobre 2003
    Messages : 24
    Points : 6
    Points
    6

    Par défaut [AS400]Comment faire une procedure stockée paramétrée?

    Bonjour,

    Je travaille actuellement sur une procédure stockée sur DB2400. Toutes les tables de mes requêtes dans ma procédure sont préfixées avec le nom de la bibliothèque où elles se trouvent. Cependant je souhaiterai ne pas avoir à préfixer en dur ma bibliothèque.

    Est il possible, par exemple, de passer le nom de ma bibliothèque en paramètre de ma procédure et ensuite d'utiliser ce paramètre afin de préciser la bibliothèque à attaquer?

    Si vous avez d'autres solutions, je suis ouvert.

  2. #2
    Invité régulier
    Inscrit en
    octobre 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : octobre 2003
    Messages : 24
    Points : 6
    Points
    6

    Par défaut

    J'ai essayé plusieurs méthodes mais je n'arrive pas à les faire fonctionner.

    J'ai notamment essayé de passer en paramètre de ma procédure le nom des
    bibliothèques à interroger. Ensuite dans ma procédure je définis mon current sqlid avec la chaine que j'ai passé en paramètre. Mais j'ai toujours une erreur me disant que la table est introuvable

    Avez vous une idée ingénieuse pour parer cela?

    Merci d'avance.

  3. #3
    Membre habitué
    Inscrit en
    avril 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : avril 2003
    Messages : 288
    Points : 137
    Points
    137

    Par défaut

    As tu essayé de compiler ta procédure plusieurs fois dans des schémas différents.
    Ensuite dans l'appel de ta procédure, tu spécifie le schéma à utiliser

    exec monschema.maproc(x,y)

    Sinon, regarde s'il existe des objet de type user, table, ... à passer en paramètres.
    Je sais pas non plus si l'on peux créer des objets ou des structures dans DB2.

    Pour ma part, j'ai une petite question :
    Est-ce que tu sais comment l'on défini des variables de type tableau (pas des tables temporaires) à 2 dimensions (ou plus).
    Je sais le faire en PL/SQL mais pas sous DB2. Merci d'avance

    J'espère t'avoir aidé/inspiré.

    ++

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    mars 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : mars 2002
    Messages : 72
    Points : 1 030
    Points
    1 030

    Par défaut

    Si la procédure stockée est compilée et appelée en convention d'appelation système (valeur spécifique à l'os400 ==> *SYS qui s'indique a la compilation de la procédure stockée et aussi qu'on spécifie au niveau des drivers jdbc et odbc) alors la notation native as400 peut être utilisées pour référencer les fichier (ex:select * from bibliothèque/fichier ) mais en plus, la procédure stockée va utiliser la liste de bibliothèque pour trouver les fichiers si les bibliothèques ne sont pas renseignées dans la requête.

    Bien sûr , dans ce cas, les prcédures stockées ne sont pas portables sur autre chose que de l'as400 .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                        Lancer des instructions SQL (RUNSQLSTM)                    
     
    Indiquez vos choix, puis appuyez sur ENTREE.                                   
     
    Fichier source . . . . . . . . .                 Nom                           
      Bibliothèque . . . . . . . . .     *LIBL       Nom, *LIBL, *CURLIB           
    Membre source  . . . . . . . . .                 Nom                           
    Contrôle de validation . . . . .   *CHG          *CHG, *UR, *CS, *ALL, *RS...  
    Appellation  . . . . . . . . . .   *SYS          *SYS, *SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     Convention d'appellation (NAMING)                                    
     
         Indique la convention d'appellation utilisée pour les objets des 
         instructions SQL.                                                
     
     *SYS                                                            
         La convention d'appellation du système                      
         (nom-bibliothèque/nom-fichier) est utilisée.                
     
     *SQL                                                            
         La convention d'appellation SQL (nom-schéma.nom-table) est  
         utilisée.

    Si maintenant l'on veut utiliser la convention d'appelation SQL , alors une des façons de s'en sortir est d'utiliser du SQL dynamique dans la procédure stockée et construire sa requete dans le programme appelant la procédure stockée , cette requête est alors passée à la procédure qui l'executera.
    C'est lors de la construction de la requête qu'il faudra se débrouiller pour retrouver les blibliothèques de chaque fichiers à l'aide par exemple d'une autre procédure stockée qui va extraire la bibliothèque du fichier système systables de QYS2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TABLE_SCHEMA FROM qsys2/systables WHERE table_name = 'MonFichier'
    Attention dans ce cas si le fichier est présent dans plusieurs bibliothèques, car il apparaitra plusieurs fois, il faudra donc trouver un moyen d'isoler la bonne bibliothèque (en utilisant une liste de bibliothèque propre à l'application...par exemple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TABLE_SCHEMA FROM qsys2/systables WHERE table_name = 'MonFichier' where table_schema in and tabl_schema in ('bib1' , 'bib2' , 'bib' )
    voila quelques pistes.... sinon les RED books d'ibm sur les procédures stockées regorgent d'informations utiles aussi.

Discussions similaires

  1. Réponses: 7
    Dernier message: 31/07/2008, 17h16
  2. [SQL] Comment faire une procédure stockée
    Par PoichOU dans le forum PHP & SGBD
    Réponses: 9
    Dernier message: 28/05/2007, 21h58
  3. comment Executer une procedure stocké paramétré
    Par Khalid.bounouader dans le forum Accès aux données
    Réponses: 1
    Dernier message: 30/10/2006, 17h36
  4. Peut t'on faire une procedure stocké sur access ?
    Par Solero dans le forum Access
    Réponses: 2
    Dernier message: 21/04/2006, 11h04
  5. [AS400] Comment faire des procédures stockées ?
    Par marsup54 dans le forum DB2
    Réponses: 6
    Dernier message: 22/08/2005, 15h34

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