Appel d'un programme de service via une procédure stockée

RPG (3 et 4, free), CL, SQL, etc...
Répondre
GUIRO
Messages : 55
Enregistré le : mar. 11 sept. 2018, 10:32:36
Localisation : Lyon

Appel d'un programme de service via une procédure stockée

Message par GUIRO »

Bonjour,

L'un de nos développeur essaye d’accéder à un programme de service via une procédure stockée

Le programme de service à une fonction définit comme suite :

P Recalcul B EXPORT

D Recalcul PI
D PBZDZ 8S 0 VALUE


Il essaye de l’appeler via le procédure stockée suivante :

CREATE PROCEDURE TRAN000(IN PDATE DEC (8, 0))
LANGUAGE RPGLE NOT DETERMINISTIC CONTAINS SQL
EXTERNAL NAME TRAN000M(Recalcul) PARAMETER STYLE GENERAL

Mais ça ne fonctionne pas. La fonction est bien appelée mais la zone PBZDZ contient toujours des caractères incorrects.
Il a essayé plusieurs types de paramètres, mais rien ne fonctionne.

Auriez-vous une idée ou une piste que je pourrais lui transmettre

D'avance merci pour vos retours
Cdt
David

nbonnet
Messages : 198
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Appel d'un programme de service via une procédure stockée

Message par nbonnet »

Bonjour,

Je ne suis pas certain que le passage de paramètre en value soit possible avec les procédures stockées.
Pouvez vous essayer avec une procédure déclarant le(s) paramètre(s) en CONST plutôt ?

Cordialement,
Nathanaël

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

Re: Appel d'un programme de service via une procédure stockée

Message par Hurri »

Il y a déjà un conflit entre ta valeur en entrée (dans la procédure stockée), et la valeur en Entrée/Sortie dans la procédure RPG.

Personnellement j'aurais créé la procédure RPG avec une valeur en entrée simple et j'aurais retourné la valeur calculée dans la valeur de retour

Code : Tout sélectionner

                                                                                                
     P Recalcul        B                   Export                                               
                                                                                                
     D Recalcul        PI             8s 0                                      Valeur en retour
     D PBZDZ                          8s 0 Const                                Valeur en entrée
Et du coup la procédure stockée aurait également 2 paramètres, un en entrée et un en sortie.

GUIRO
Messages : 55
Enregistré le : mar. 11 sept. 2018, 10:32:36
Localisation : Lyon

Re: Appel d'un programme de service via une procédure stockée

Message par GUIRO »

Retour

Il avait déjà essayé avec une CONST mais s'est rappelé qu’en faisant ces multiples tests, il avait peut-être encore en mémoire l'ancienne version.
Il a donc réessayé en CONST en fermant sa session et en repartant de zéro, et ça fonctionne.

Merci Nathanaël
David

GUIRO
Messages : 55
Enregistré le : mar. 11 sept. 2018, 10:32:36
Localisation : Lyon

Re: Appel d'un programme de service via une procédure stockée

Message par GUIRO »

Bonjour Hurri,

Je lui passe ton raisonnement peut être que ça va l'aider.

Merci
David

Xavier.
Messages : 9
Enregistré le : ven. 24 mars 2023, 10:38:55

Re: Appel d'un programme de service via une procédure stockée

Message par Xavier. »

Bonjour,

Je reprends la suite de la conversation, après avoir créé un compte pour éviter de passer par un intermédiaire.

En fait ça ne fonctionne pas, même avec CONST.
J'obtiens toujours la même erreur de paramètre contenant des caractères incorrects.

Pour l'instant, la seule solution que j'ai trouvé est de passer par un programme intermédiaire, qui se contente d'appeler le pg de service. ça marche, mais ce n'est clairement pas optimisé.

Je pense qu'il doit y avoir une erreur dans la déclaration de la procédure stockée, qui convertit mal le paramètre en entrée, mais je ne vois pas quoi.

Si vous avez une idée...

Rq: Pour Hurri, je ne vois pas de conflit entre les appels. La fonction Recalcul ne retourne rien. L'appel de la procédure se fait par un paramètre unique en entrée seule. Tout me semble correct de ce côté-là.

Merci

Xavier.
Messages : 9
Enregistré le : ven. 24 mars 2023, 10:38:55

Re: Appel d'un programme de service via une procédure stockée

Message par Xavier. »

Je progresse...

J'ai tenté un passage de paramètre en alphanumérique, puis une conversion numérique dans la fonction.
ça fonctionne dans ce cas, le paramètre est bien reçu, et la conversion se fait bien.

Je pense qu'il y a un problème de conversion des zones numériques entre SQL et le programme de service.
C'est d'autant plus étonnant que ça fonctionne parfaitement entre SQL et un programme RPGLE.

Je suis toujours partant si vous trouvez une solution pour déclarer correctement ce passage de paramètre...

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

Re: Appel d'un programme de service via une procédure stockée

Message par Hurri »

Déjà répondu sur un autre forum...
La procédure aurait du déclarer un NUMERIC et non un DECIMAL

Xavier.
Messages : 9
Enregistré le : ven. 24 mars 2023, 10:38:55

Re: Appel d'un programme de service via une procédure stockée

Message par Xavier. »

Je détaille ici la réponse de Hurri qui m'a débloqué sur une autre forum pour ceux qui ont le même problème.

Si la fonction attend une zone en décimal étendu (par exemple 8S 0), il faut déclarer dans la procédure SQL une zone en NUMERIC(8, 0).

La déclaration de procédure en DEC(8, 0) correspond sur l'AS400 à du décimal packé (zone en 8P 0).

Merci à lui.

Répondre