PB avec sql et variable

RPG (3 et 4, free), CL, SQL, etc...
Répondre
BrigitteG
Messages : 109
Enregistré le : jeu. 20 sept. 2012, 08:56:38

PB avec sql et variable

Message par BrigitteG »

Bonjour,

Je cherche à récupérer le nom d'un fichier pour faire un update sur un enregistrement.
Ce nom doit être récupéré en faisant une recherche sur deux fichiers.

Le nom de la bibliothèque est passé en variable.

Quand je passe par cette méthode, cela fonctionne (mais je mets la bib en dure)

Code : Tout sélectionner

d wTABLE_NAME     s             20
exec sql                                                           
SELECT "TABLE_NAME"                                                
  into :wTABLE_NAME                                                
  FROM ODCL/ARSSEG                                               
  WHERE AGID = (SELECT AGID FROM ODCL/ARSAG WHERE NAME = :E_Doc);
En utilisant cette solution, j'ai le message : Variable WTABLE_NAME non définie ou non utilisable.

Code : Tout sélectionner

d wTABLE_NAME     s             20
File1 = %trim(E_Bib)+ '/ARSSEG';                             
File2 = %trim(E_Bib)+ '/ARSAG';                              
Requete = 'select "TABLE_NAME" into :wTABLE_NAME from ' +    
          %trim(File1) + ' WHERE AGID = (SELECT AGID FROM ' +
          %trim(File2) + ' WHERE NAME = :E_Doc)';            
exec sql                                                     
 execute immediate :requete;                                 
En regardant le contenu de Requete, mes variables File1 et File2 ont bien les valeurs.

Code : Tout sélectionner

select "TABLE_NAME" into :wTABLE_NAME from ODCL/ARSSEG WHERE 
AGID = (SELECT AGID FROM ODCL/ARSAG WHERE NAME = :E_Doc)
Je ne comprends pas où je fais une erreur.

Merci d'avance pour votre aide.
Modifié en dernier par BrigitteG le ven. 13 févr. 2015, 10:48:50, modifié 3 fois.

Philippe S
Messages : 11
Enregistré le : lun. 02 févr. 2015, 19:46:00

Select Into

Message par Philippe S »

Tu ne peux pas utiliser SQL dynamique avec SELECT INTO.
Donc, soit tu utilises SQL statique, soit un curseur, pour récupérer ta donnée.

Curseur

Code : Tout sélectionner

File1 = 'ARSSEG';                             
File2 = 'ARSAG';                             
Requete = 'select "TABLE_NAME" from ' + %trim(E_Bib)+ '/' + %trim(File1) +
' WHERE AGID = (SELECT AGID FROM ' + %trim(E_Bib)+ '/' + %trim(File2) +
' WHERE NAME = ' + x'7D' + E_Doc + x'7D' + ')'; // x'7D' = quote si E_Doc est alphanumérique

 exec sql  prepare sqlstm from :Requete;              
 exec sql  declare c1 cursor for sqlstm; 
 exec sql  open c1;                                  
 exec sql  fetch from c1 into :wTABLE_NAME; 
 exec sql  close c1;

BrigitteG
Messages : 109
Enregistré le : jeu. 20 sept. 2012, 08:56:38

PB avec sql et variable

Message par BrigitteG »

Merci Philippe pour ces explications

Répondre