Vous avez dans un programme RPGLE un select into en SQL à faire, mais vous devez choisir la bibliothèque ou se trouve le fichier !
Voici 3 solutions pour éviter le hard codage
1ére solution
Cette solution est plus adaptée à un curseur.
Formater une variable exemple sqlstm
sqlstm = ‘select votrezone from ‘ + votre_lib + ‘/votre_table’ ;
exec SQL
declare curs01 Cursor
for sqlstm ;
exec SQL
prepare sqlstm
from :sqlstm ;
exec SQL
open curs01 ;
exec sql
fetch next
from curs01
into :votrezone ;
On est d’accord, c’est un peu lourd
Voici une alternative
Si vous êtes en convention de nommage *SYS, vous pouvez utiliser la liste de bibliothèques
exec sql
call qcmdexc( ‘addlible ‘ concat :votre_lib) ;
// select sans bibliothèque
exec sql
select mazone into : wmazone from matable ;
Si vous êtes en convention de nommage *SQL, vous devez préciser le schéma courant – par défaut c’est le profil utilisateur.
// select sans bibliothèque
exec sql
set schema :votre_lib ;
exec sql
select mazone into : wmazone from matable ;
A noter que dans la cas d’une convention de nommage *SQL, toutes vos tables doivent être dans la même bibliothèque, en cas de jointure par exemple
Il existe effectivement une autre alternative avec dynamic SQL,
Merci Birgitta pour cette précision .
Avec dynamic SQL et VALUES … INTO:
Exemple:
CmdSQL = ‘Values( Select Count(*) from ‘ + %Trim(YourSchema) + ‘.YourTable ‘ +
‘ ) into ?’;
Exec SQL Prepare DynSQL from :CmdSQL;
Exec SQL Execute DynSQL using :YourResult;