SQL PROCEDURE - CURLIB - SCHEMA
Posté : mar. 03 nov. 2020, 18:08:25
Bonjour
je suis face à une réaction que je ne m'explique pas :
J'ai une procédure qui va créé une table. Cette dernière dois être créée dans la bib de la procédure. Cette bib n'est pas figée.
Pour connaitre la bib de la procédure en cours d'exécution j'utilise :
SELECT PROGRAM_LIBRARY_NAME
FROM TABLE(QSYS2.STACK_INFO('*')) A
WHERE PROGRAM_NAME = 'MaProc'
FETCH FIRST ROW ONLY
Aprés quoi j'ai tenté :
CALL QCMDEXC('CHGCURLIB CURLIB(' CONCAT TRIM(PROGRAM_LIBRARY_NAME) CONCAT ')';
et aussi
SET SCHEMA = PROGRAM_LIBRARY_NAME;
Enfin, vient la création de la table (basée sur une table temporaire)
CREATE TABLE MYTABLE AS ( SELECT * FROM SESSION.TEMPO ) WITH NO DATA;
Lorsque je suis sous ACS Script, MYTABLE est bien créé dans la bib indiquée par PROGRAM_LIBRARY_NAME
Lorsque je soumet (via un CLLE *PGM avec RUNSQL CALL LaProc) la table MYTABLE et invariablement créée dans QGPL.
en guise de palliatif, je construit le CREATE TABLE et passe par EXECUTE IMMEDIAT, ça fonctionne mais m'explique pas pourquoi ça ne fonctionne pas sans ce palliatif en mode batch.
Merci de votre aide
je suis face à une réaction que je ne m'explique pas :
J'ai une procédure qui va créé une table. Cette dernière dois être créée dans la bib de la procédure. Cette bib n'est pas figée.
Pour connaitre la bib de la procédure en cours d'exécution j'utilise :
SELECT PROGRAM_LIBRARY_NAME
FROM TABLE(QSYS2.STACK_INFO('*')) A
WHERE PROGRAM_NAME = 'MaProc'
FETCH FIRST ROW ONLY
Aprés quoi j'ai tenté :
CALL QCMDEXC('CHGCURLIB CURLIB(' CONCAT TRIM(PROGRAM_LIBRARY_NAME) CONCAT ')';
et aussi
SET SCHEMA = PROGRAM_LIBRARY_NAME;
Enfin, vient la création de la table (basée sur une table temporaire)
CREATE TABLE MYTABLE AS ( SELECT * FROM SESSION.TEMPO ) WITH NO DATA;
Lorsque je suis sous ACS Script, MYTABLE est bien créé dans la bib indiquée par PROGRAM_LIBRARY_NAME
Lorsque je soumet (via un CLLE *PGM avec RUNSQL CALL LaProc) la table MYTABLE et invariablement créée dans QGPL.
en guise de palliatif, je construit le CREATE TABLE et passe par EXECUTE IMMEDIAT, ça fonctionne mais m'explique pas pourquoi ça ne fonctionne pas sans ce palliatif en mode batch.
Merci de votre aide