Dans un script de test fait avec iRpgunit, je souhaite préparer des jeux de données dans des tables créées pour la circonstance. Mais je ne connais pas la bibliothèque/schéma d’avance, c’est une information transmise par paramètre. Mais pour ne pas être obligé d’utiliser des requêtes dynamiques je souhaiterais savoir quelle est la commande SQL pour indiquer à DB2 d’utiliser tel schéma par défaut pour les requêtes ? Cordialement,
Après recherche :
Dans le cas de requêtes dynamiques, on peut utiliser :
exec sql set Current Schema = :WorkLib;
Dans le cadre de requête SQL statitique, le schéma peut être spécifié à la création de l’objet avec :
exec sql SET OPTION DFTRDBCOL = BIBLIOTHEQUE;
ou avec l’option DFTRDBCOL de CRTSQLRPGI où on spécifie le schéma.
L’inconvénient de ces 2 dernières méthodes est que le nom du schéma ne peut pas être contenu dans une variable. Car ces deux méthodes s’appliquent à la compilation.
Il reste une dernière méthode, l’utilisation de la bibliothèque courante(CURLIB) avec ces 2 instructions :
g_bib_defaut = 'BIB_PAR_DEFAUT'; QCMDEXC('CHGCURLIB ' + g_bib_defaut:50);
Les requêtes SQL avec des tables non qualifées seront recherchées dans la bibliothèque courante.
La solution est sur cette page Specify SQL Table-creation Library at Runtime.
En résumé, on peut utiliser :
exec sql set Current Schema = :WorkLib;