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
SQL PROCEDURE - CURLIB - SCHEMA
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
Re: SQL PROCEDURE - CURLIB - SCHEMA
ESt-ce la même convention d'appellation ? *SQL/*SYS. les règles ne sont pas les même.....
Christian Massé (Volubis.fr)
Re: SQL PROCEDURE - CURLIB - SCHEMA
Je vois que le travail est soumis.
Dans la commande SBMJOB quelle est la valeur du paramètre CURLIB ?
Dans la commande SBMJOB quelle est la valeur du paramètre CURLIB ?
Re: SQL PROCEDURE - CURLIB - SCHEMA
Bonjour,
coté ACS script je suis en *SYS (config.JDBC) et coté Power, j'imagine être également en *SYS par défaut pour la soumission.
la soumission étant en fait un STRPJ, avec un profil dédié en CURLIB(*CRTDFT) et une JOBD (profil *RQD) qui n'a rien de particulier (juste liste LIBL et consignation log)
Il n'y a donc pas de CURLIB dans le JOB soumis (le profil de soumission étant avec *CRTDFT), elle est placée lors de l'exécution de la procédure SQL.
Merci
coté ACS script je suis en *SYS (config.JDBC) et coté Power, j'imagine être également en *SYS par défaut pour la soumission.
la soumission étant en fait un STRPJ, avec un profil dédié en CURLIB(*CRTDFT) et une JOBD (profil *RQD) qui n'a rien de particulier (juste liste LIBL et consignation log)
Il n'y a donc pas de CURLIB dans le JOB soumis (le profil de soumission étant avec *CRTDFT), elle est placée lors de l'exécution de la procédure SQL.
Merci
Re: SQL PROCEDURE - CURLIB - SCHEMA
Bonjour,
je n'ai pas trouvé la solution, mais plus un palliatif qui consiste à écrire dynamiquement la requête de création de table :
DECLARE CUR01 CURSOR FOR
SELECT PROGRAM_LIBRARY_NAME
FROM TABLE(QSYS2.STACK_INFO('*')) A
WHERE PROGRAM_NAME = 'MaProcédure'
FETCH FIRST ROW ONLY
;
OPEN CUR01;
FETCH FROM CUR01 INTO W_BIBPROC;
CLOSE CUR01;
SET W_SQLCMD = 'CREATE TABLE ' CONCAT W_BIBPROC CONCAT 'MYTABLE'
CONCAT ' AS ( SELECT * FROM SESSION.TEMPO ) WITH NO DATA'
;
EXECUTE IMMEDIATE W_SQLCMD;
Si cela peut servir à d'autres.
Bonne journée
je n'ai pas trouvé la solution, mais plus un palliatif qui consiste à écrire dynamiquement la requête de création de table :
DECLARE CUR01 CURSOR FOR
SELECT PROGRAM_LIBRARY_NAME
FROM TABLE(QSYS2.STACK_INFO('*')) A
WHERE PROGRAM_NAME = 'MaProcédure'
FETCH FIRST ROW ONLY
;
OPEN CUR01;
FETCH FROM CUR01 INTO W_BIBPROC;
CLOSE CUR01;
SET W_SQLCMD = 'CREATE TABLE ' CONCAT W_BIBPROC CONCAT 'MYTABLE'
CONCAT ' AS ( SELECT * FROM SESSION.TEMPO ) WITH NO DATA'
;
EXECUTE IMMEDIATE W_SQLCMD;
Si cela peut servir à d'autres.
Bonne journée