IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DB2 Discussion :

[AS/400] Récupérer le retour d'un CALL dans un SET


Sujet :

DB2

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SET N.REFCLI = CALL AALWEB2010.PONDRE(CONCAT('refcli', N.CODECLIENT));
    Je reçois cette erreur :
    [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) :
    [IBM][Pilote ODBC iSeries Access][DB2 UDB]SQL0204 - PONDRE de type *N dans AALWEB2010 non trouvé

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SET N.REFCLI = PONDRE(CONCAT('refcli', N.CODECLIENT));

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       CREATE PROCEDURE  maproc (IN Param1 varchar(512), OUT Param2 varchar(512))
    ...
    Je préfère passer par une fonction si possible.

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SET N.REFCLI = PONDRE(CAST CONCAT('refcli', N.CODECLIENT) as CHAR(30));

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/06/2008, 15h36
  2. [PHP-JS] récupérer le retour d'une fonction javascript
    Par nadiaflamingenierie dans le forum Langage
    Réponses: 5
    Dernier message: 29/04/2008, 11h15
  3. récupérer le retour d'une fonction unix
    Par dams78 dans le forum Général Java
    Réponses: 4
    Dernier message: 04/04/2008, 23h41
  4. Où récupérer le retour de cette requête ?
    Par nerillis dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/07/2007, 10h52
  5. récupérer le retour d'une commande
    Par dams78 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 15/03/2007, 09h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo