|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : octobre 2003 Messages : 24 ![]() |
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. |
|
|
00
|
|
|
#2 |
|
Invité régulier
![]() Inscription : octobre 2003 Messages : 24 ![]() |
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. |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() |
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é. ++ |
|
|
00
|
|
|
#4 | ||||
|
Membre Expert
![]() ![]() Consultant informatique Inscription : mars 2002 Messages : 69 ![]() |
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 :
Code :
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' Code :
SELECT TABLE_SCHEMA FROM qsys2/systables WHERE table_name = 'MonFichier' WHERE table_schema IN AND tabl_schema IN ('bib1' , 'bib2' , 'bib' ) |
||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com