Je souhaite copier les lignes d'un fichier txt de l'IFS (qui matchent avec certaines lignes d'un fichier PF) vers un autre fichier txt. Je vois que par SQL c'est rapide à faire :
begin
for select LINE as maLigne
from table(QSYS2.IFS_READ('/zzz/blabla.txt'))
where substr(LINE, 1, 6) in (select champ1 from maBib/monFic)
do call QSYS2.IFS_WRITE(PATH_NAME => '/zzz/extract.txt',
LINE => maLigne);
end for;
end;
C'est cool, ça fonctionne quand je lance ça par l'exécution de scripts SQL.... mais est-ce possible de d'implémenter ça directement dans un SQLRPGLE ?
Si je pouvais éviter un curseur/fetch, ça serait sympatôche.
Modifié en dernier par aapra le mer. 25 janv. 2023, 15:20:36, modifié 1 fois.
EXEC SQL
CALL qsys2.ifs_write(
PATH_NAME => '/zzz/extract.txt',
line => ( select LINE as maLigne
from table(QSYS2.IFS_READ('/zzz/blabla.txt'))
where substr(LINE, 1, 6) in (select champ1 from maBib/monFic)),
LINE => maLigne);
call QSYS2.IFS_WRITE(
PATH_NAME => '/zzz/extract.txt',
LINE => (
select LINE
from table(QSYS2.IFS_READ('/zzz/blabla.txt'))
where substr(LINE, 1, 6) in (select champ1 from maBib/monFic)
)
);
Message : [SQL0811] Résultat de SELECT dépasse une ligne. Cause . . . . . : La table résultante d'une instruction SELECT INTO, d'une sous-requête ou d'une sous-requête d'une instruction SET comporte plusieurs lignes. [...].
Mais merci pour la réponse, je n'avais même pas penser à mettre un select en entrée du paramètre LINE.
Oups, un oublie par rapport à ce que j'avais fait. Il faut effectivement une seule ligne de résultat.
Rien n'empêche d'utiliser la fonction LISTAGG avec un retour chariot.