Précédent   Forum du club des développeurs et IT Pro > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 02/11/2005, 18h30   #1
ahoyeau
Invité régulier
 
Inscription : 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.
ahoyeau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2005, 11h13   #2
ahoyeau
Invité régulier
 
Inscription : octobre 2003
Messages : 24
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 24
Points : 6
Points : 6
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.
ahoyeau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2005, 22h01   #3
marsup54
Membre habitué
 
Inscription : avril 2003
Messages : 288
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : avril 2003
Messages : 288
Points : 126
Points : 126
Envoyer un message via MSN à marsup54 Envoyer un message via Skype™ à marsup54
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é.

++
marsup54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2006, 10h55   #4
Olivier Constans
Membre Expert
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mars 2002
Messages : 69
Points : 1 030
Points : 1 030
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.
Olivier Constans est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h32.


 
 
 
 
Partenaires

Hébergement Web