SQL PROCEDURE - CURLIB - SCHEMA

RPG (3 et 4, free), CL, SQL, etc...
Répondre
ybosse
Messages : 5
Enregistré le : mar. 03 nov. 2020, 17:34:12

SQL PROCEDURE - CURLIB - SCHEMA

Message par ybosse »

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

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Re: SQL PROCEDURE - CURLIB - SCHEMA

Message par cmasse »

ESt-ce la même convention d'appellation ? *SQL/*SYS. les règles ne sont pas les même.....
Christian Massé (Volubis.fr)

Hurri
Messages : 44
Enregistré le : lun. 02 nov. 2020, 16:04:59

Re: SQL PROCEDURE - CURLIB - SCHEMA

Message par Hurri »

Je vois que le travail est soumis.
Dans la commande SBMJOB quelle est la valeur du paramètre CURLIB ?

ybosse
Messages : 5
Enregistré le : mar. 03 nov. 2020, 17:34:12

Re: SQL PROCEDURE - CURLIB - SCHEMA

Message par ybosse »

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

ybosse
Messages : 5
Enregistré le : mar. 03 nov. 2020, 17:34:12

Re: SQL PROCEDURE - CURLIB - SCHEMA

Message par ybosse »

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

Répondre