Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/04/2011, 09h45   #1
Membre expérimenté
 
Emmanuel Bourgerie
Inscription : mai 2009
Messages : 277
Détails du profil
Informations personnelles :
Nom : Emmanuel Bourgerie

Informations forums :
Inscription : mai 2009
Messages : 277
Points : 503
Points : 503
Par défaut [AS/400] Récupérer le retour d'un CALL dans un SET

Salux !

Sur un trigger, j'essaie d'appeler une fonction pour en récupérer le résultat dans une variable comme ceci :

(N = NEW)
Code :
SET N.REFCLI = CALL AALWEB2010.PONDRE(CONCAT('refcli', N.CODECLIENT));
Je reçois cette erreur :
Citation:
[IBM][Pilote ODBC iSeries Access][DB2 UDB]SQL0312 - Variable CALL non définie ou non utilisable
Si j'enlève le CALL (comme j'ai pu le voir sur des forums) :
Citation:
[IBM][Pilote ODBC iSeries Access][DB2 UDB]SQL0204 - PONDRE de type *N dans AALWEB2010 non trouvé
manudwarf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 10h09   #2
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Dans une procédure on peut avoir des paramètres IN, OUT ou INOUT selon sa définition.
Exemple :

Code :
1
2
   CREATE PROCEDURE  maproc (IN Param1 varchar(512), OUT Param2 varchar(512))
...
Pas besoin de faire un SET, suite au CALL, dans l'exemple ci-dessus, Param2 contiendra la valeur en retour.

Maintenant tu parles de fonctions, il y a donc confusion dans tes propos.
Si PONDRE est une fonction (selon le code que tu as publié) alors il te suffit de faire :


Code :
SET N.REFCLI = PONDRE(CONCAT('refcli', N.CODECLIENT));
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 10h17   #3
Membre expérimenté
 
Emmanuel Bourgerie
Inscription : mai 2009
Messages : 277
Détails du profil
Informations personnelles :
Nom : Emmanuel Bourgerie

Informations forums :
Inscription : mai 2009
Messages : 277
Points : 503
Points : 503
Citation:
Envoyé par K2R400 Voir le message
Dans une procédure on peut avoir des paramètres IN, OUT ou INOUT selon sa définition.
Exemple :

Code :
1
2
   CREATE PROCEDURE  maproc (IN Param1 varchar(512), OUT Param2 varchar(512))
...
Je préfère passer par une fonction si possible.

Citation:
Maintenant tu parles de fonctions, il y a donc confusion dans tes propos.
Si PONDRE est une fonction (selon le code que tu as publié) alors il te suffit de faire :


Code :
SET N.REFCLI = PONDRE(CONCAT('refcli', N.CODECLIENT));
Oui oui c'est bien une fonction, avec un zoli CREATE FUNCTION. Comme je l'ai précisé, ne pas mettre de CALL renvoie une erreur, même l'exemple que tu fournis.

edit: tant que ça me vient à l'esprit, la fonction attend un CHAR(30). Est-ce que ça peut avoir un lien ?
manudwarf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 10h26   #4
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Citation:
Envoyé par manudwarf Voir le message
edit: tant que ça me vient à l'esprit, la fonction attend un CHAR(30). Est-ce que ça peut avoir un lien ?
Quand on passe une constante, comme dans ton cas, il considère que c'est un VARCHAR, donc la signature diffère, il ne trouve pas la fonction.
Pour résoudre ton problème :

1) Soit tu redéfinis ta fonction avec un VARCHAR plutôt qu'un CHAR
2) Soit tu fais tu casting comme ci-dessous :


Code :
SET N.REFCLI = PONDRE(CAST CONCAT('refcli', N.CODECLIENT) AS CHAR(30));
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h45.


 
 
 
 
Partenaires

Hébergement Web