+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  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 : 39

    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
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mars 2002
    Messages : 71
    Points : 1 029
    Points
    1 029

    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 :
    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 :
    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 :
    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •