procédure stockée

RPG (3 et 4, free), CL, SQL, etc...
Répondre
SELLERON
Messages : 8
Enregistré le : mer. 21 nov. 2018, 10:14:30

Message par SELLERON »

Bonjour,

J'essaye de mettre en place le traitement suivant :
Depuis java via une connection JDBC, j'appelle une procédure stockée (qui appelle un SQLRPGLE) qui me retournera l'édition d'un document (ARC, BL...) dans un BLOB :
- Génération du spool
- Transformation du spool en PDF sur l'IFS par mapping
- Passage en paramètre dans un blob du fichier pdf de l'IFS via une fonction table.
Tous le traitement fonctionne lors de l'appelle du SQLRPGLE mais le problème se produit lors de l'appelle de la procédure stockée.

Voici le message lorsque j'exécute depuis le le requeteur d'Iséeries Navigator (dans mon cas je passe par ACS) :
[ Fri Nov 23 11:18:32 GMT 2018 ] Exécution globale... CALL GESD940010.PTRKCDE_06 ('POU', 'NI', 'AR', '007898348', null, null, null) Etat SQL : 42926 Code fournisseur : -7034 Message : [SQL7034] Les pointeurs LOB et XML ne sont pas admis avec COMMIT(*NONE). Cause . . . . . : Les pointeurs LOB et XML ne peuvent pas être utilisés avec un contrôle de validation de niveau *NONE ou *NC. Que faire . . . : Utilisez un contrôle de validation de niveau *CHG, *UR, *CS, *ALL, *RS ou *RR. L'instruction mise en évidence a échoué, entraînant l'interruption du traitement Instructions ayant échoué : 1

Suite à ce message j'ai changer le paramétrage de ma connection JDC de "Pas de validation (*NC et *NONE)" en "lecture stable (*RS et *ALL)" et j'ai le message suivant :
[ Fri Nov 23 11:22:45 GMT 2018 ] Exécution globale... CALL GESD940010.PTRKCDE_06 ('POU', 'NI', 'AR', '007898348', null, null, null) Etat SQL : 58004 Code fournisseur : -901 Message : [SQL0901] Erreur système SQL. Cause . . . . . : Une erreur système SQL est intervenue. L'instruction SQL en cours ne peut s'exécuter avec succès. Cette erreur n'empêchera pas cependant l'exécution des instructions suivantes. Il se peut que des messages précédents aient signalé un incident lié à cette instruction SQL et que SQL n'ait pas correctement diagnostiqué l'erreur. Les messages précédents indiquent peut-être qu'un incident s'est produit sur cette instruction SQL, mais que le diagnostic n'a pas été correctement effectué par SQL. L'ID message précédent est MCH0601. Une erreur interne de type 7018 s'est produite. S'il s'agit d'une précompilation, le traitement s'interrompra sur cette instruction. Que faire . . . : Consultez les messages précédents pour déterminer si un incident s'est produit sur cette instruction SQL. Pour consulter les messages, utilisez la commande DSPJOBLOG en mode interactif, ou la commande WRKJOB pour visualiser la sortie d'une précompilation. Un programme d'application recevant ce code retour peut tenter de lancer de nouvelles instructions SQL. Corrigez les erreurs éventuelles et renouvelez votre demande. L'instruction mise en évidence a échoué, entraînant l'interruption du traitement Instructions ayant échoué : 1


Ci-dessous ma procédure stockée :
CREATE PROCEDURE GESD940010/PTRKCDE_06(
IN excste CHAR (3 ),
IN exetab CHAR (2 ),
IN extdoc CHAR (2 ),
IN exndoc NUMERIC(9, 0),
OUT rfdocu BLOB ,
OUT rfreto CHAR (1 ),
OUT rfmess CHAR (80 ))
LANGUAGE RPGLE SPECIFIC GESD940010/PTRKCDE_06
NOT DETERMINISTIC READS SQL
DATA CALLED ON NULL INPUT
EXTERNAL NAME GESD940010/PTRKCDE_06
PARAMETER STYLE GENERAL

Merci d'avance pour votre aide

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

Message par cmasse »

il faudrait avoir la JOBLOG
Christian Massé (Volubis.fr)

SELLERON
Messages : 8
Enregistré le : mer. 21 nov. 2018, 10:14:30

(sujet inconnu)

Message par SELLERON »

il n'y a pas de joblog puisque ça plante avant.
Depuis un autre requeteur SQL, j'ai le message d'erreur suivant :
[Code: -469, SQL State: 42886] [SQL0469] IN, OUT ou INOUT incorrect pour le paramètre 5 de la procédure PTRKCDE_06 de GESD940010.

Je pense que le problème est lié à l'utilisation du driver JDBC (avec jt400.jar). Il doit lui manquer quelque chose pour qu'il puisse utiliser le BLOB correctement. Mais quoi?

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

(sujet inconnu)

Message par cmasse »

IL y a forcement un job QZDASOINIT qui a une joblog

WRKOBJLCK sur le profil peut aider à le retrouver.....


sinon quel est la version de l'OS ? quel version du driver JDBC ? celui d'ACS ?
Christian Massé (Volubis.fr)

SELLERON
Messages : 8
Enregistré le : mer. 21 nov. 2018, 10:14:30

(sujet inconnu)

Message par SELLERON »

Depuis nous avons avancé sur notre problématique.
j'ai un SQLRPGLE qui appelle une fonction table associée à un autre SQLRPGLE qui retourne un paramètre BLOB_LOCATOR.
Tout ça fonctionne correctement.
Lorsque j'imbrique mon premier SQLRPGLE dans une procédure stockée, le traitement fonctionne correctement mais le BLOB retourné est vide lors de l'appelle depuis java. Malheureusement, je n'ai pas de requetteur SQL me permettant de lancer cette procédure stockée qui a un paramètre BLOB en retour.

J'ai modifié la procédure stockée en ajoutant AS LOCATOR mais la problématique reste entière.

CREATE PROCEDURE GESD940010/PTRKCDE_06(
IN excste CHAR (3 ),
IN exetab CHAR (2 ),
IN extdoc CHAR (2 ),
IN exndoc CHAR(9 ),
OUT rfdocu BLOB AS LOCATOR,
OUT rfreto CHAR (1 ),
OUT rfmess CHAR (80 ))
LANGUAGE RPGLE SPECIFIC GESD940010/PTRKCDE_06
NOT DETERMINISTIC READS SQL
DATA CALLED ON NULL INPUT
EXTERNAL NAME GESD940010/PTRKCDE_06
PARAMETER STYLE GENERAL

SELLERON
Messages : 8
Enregistré le : mer. 21 nov. 2018, 10:14:30

(sujet inconnu)

Message par SELLERON »

Depuis nous avons avancé sur notre problématique.
j'ai un SQLRPGLE qui appelle une fonction table associée à un autre SQLRPGLE qui retourne un paramètre BLOB_LOCATOR.
Tout ça fonctionne correctement.
Lorsque j'imbrique mon premier SQLRPGLE dans une procédure stockée, le traitement fonctionne correctement mais le BLOB retourné est vide lors de l'appelle depuis java. Malheureusement, je n'ai pas de requetteur SQL me permettant de lancer cette procédure stockée qui a un paramètre BLOB en retour.

J'ai modifié la procédure stockée en ajoutant AS LOCATOR mais la problématique reste entière.

CREATE PROCEDURE GESD940010/PTRKCDE_06(
IN excste CHAR (3 ),
IN exetab CHAR (2 ),
IN extdoc CHAR (2 ),
IN exndoc CHAR(9 ),
OUT rfdocu BLOB AS LOCATOR,
OUT rfreto CHAR (1 ),
OUT rfmess CHAR (80 ))
LANGUAGE RPGLE SPECIFIC GESD940010/PTRKCDE_06
NOT DETERMINISTIC READS SQL
DATA CALLED ON NULL INPUT
EXTERNAL NAME GESD940010/PTRKCDE_06
PARAMETER STYLE GENERAL

Répondre