Page 1 sur 1
Appel d'un programme de service via une procédure stockée
Posté : jeu. 23 mars 2023, 14:11:04
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
Re: Appel d'un programme de service via une procédure stockée
Posté : jeu. 23 mars 2023, 14:49:36
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,
Re: Appel d'un programme de service via une procédure stockée
Posté : jeu. 23 mars 2023, 16:58:04
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.
Re: Appel d'un programme de service via une procédure stockée
Posté : jeu. 23 mars 2023, 17:14:32
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
Re: Appel d'un programme de service via une procédure stockée
Posté : jeu. 23 mars 2023, 17:15:51
par GUIRO
Bonjour Hurri,
Je lui passe ton raisonnement peut être que ça va l'aider.
Merci
Re: Appel d'un programme de service via une procédure stockée
Posté : jeu. 13 avr. 2023, 09:06:51
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
Re: Appel d'un programme de service via une procédure stockée
Posté : jeu. 13 avr. 2023, 09:35:38
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...
Re: Appel d'un programme de service via une procédure stockée
Posté : jeu. 13 avr. 2023, 11:29:37
par Hurri
Déjà répondu sur un autre forum...
La procédure aurait du déclarer un NUMERIC et non un DECIMAL
Re: Appel d'un programme de service via une procédure stockée
Posté : ven. 14 avr. 2023, 08:33:47
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.