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

PostgreSQL Discussion :

problème d'appel de fonction sous postgresql


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Sr. Software Engineer
    Inscrit en
    Août 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Software Engineer

    Informations forums :
    Inscription : Août 2007
    Messages : 169
    Par défaut problème d'appel de fonction sous postgresql
    slt j'execute un appel de focntion et j'obtiens le message d'erreur suivant et je ne comprends pas pourquoi.
    voici ma focntion


    CREATE OR REPLACE FUNCTION "public"."update_term_attribute" (varchar ,varchar, varchar) RETURNS boolean AS
    $body$
    DECLARE
    instance_rid ALIAS FOR $1; -- l_identifient du tuple
    attribute_name ALIAS FOR $2; -- le nom de l'attribut
    attribute_value ALIAS FOR $3; -- le nom de l_attribit dont on veut recuperer une valeur
    sql_query VARCHAR; -- une chaine de caracteres qui contient une commande SQL
    table_name VARCHAR;
    valeur VARCHAR;
    BEGIN
    table_name:="TermOccurancy_e";
    IF attribute_value ISNULL THEN
    sql_query := 'UPDATE "TermOccurancy_e" SET ' || attribute_name || ' = null WHERE RID = ' || instance_rid || ' ;';
    ELSE
    sql_query := 'UPDATE "TermOccurancy_e" SET ' || attribute_name || ' = '''|| attribute_value || '''
    WHERE RID = ' || instance_rid || ' ;';
    END IF;
    EXECUTE sql_query;



    RETURN TRUE;
    END;
    $body$
    LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

    qd j'execute

    SELECT update_term_attribute(15,'ref_termentry_rid',30);
    j'obtiens


    ERROR: function update_term_attribute(integer, "unknown", integer) does not exist at character 8
    HINT: No function matches the given name and argument types. You may need to add explicit type casts.

    pourtant la column ref_termentry_rid existe bien dans la table termoccurancy_e

    merci

  2. #2
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    Citation Envoyé par henpower Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE OR REPLACE FUNCTION 
    "public"."update_term_attribute" (varchar ,varchar, varchar) RETURNS boolean AS
    .....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT update_term_attribute(15,'ref_termentry_rid',30);

    ERROR: function update_term_attribute(integer, "unknown", integer) does not exist at character 8
    HINT: No function matches the given name and argument types. You may need to add explicit type casts.
    Hello,


    Tu déclare une fonction avec 3 arguments de type varchar, et tu lance une requete avec comme type d'arguments int, varchar, int
    Le message d'erreur est clair : il ne trouve pas de fonction avec le type d'arguments que tu lui passe.

    Soit tu change ta déclaration, soit tu change ta facon d'appeler ta fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT update_term_attribute('15','ref_termentry_rid','30');
    Je te conseille de changer le premier argument (l'id) en entier, ca va t'éviter qq "cast" de valeurs inutiles.

    ++

  3. #3
    Membre confirmé
    Profil pro
    Sr. Software Engineer
    Inscrit en
    Août 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Software Engineer

    Informations forums :
    Inscription : Août 2007
    Messages : 169
    Par défaut
    j'ai changé le type de paramètre en int,varchar, int mais tjr rien
    sans doute justemen un pet de casting. comment le resoudre?
    merci

  4. #4
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    A part "ISNULL" au lieu de "IS NULL" , je ne vois pas à priori ce qui peut poser problème

    Si tu mets le 3e paramètre en int, tu peux virer les simples quote autour de attribute_value (dans la requete), tout comme pour instance_rid.

    Essaye de rajouter un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RAISE NOTICE ' query : % ', sql_query;
    avant d'executer ta requete, ca va peut etre t'aider à trouver le problème.

    (c'est toujours le même message d'erreur ?)

    ++

  5. #5
    Invité
    Invité(e)
    Par défaut
    C'est peut-être une question idiote, mais faire ceci:
    IF attribute_value ISNULL THEN
    sql_query := 'UPDATE "TermOccurancy_e" SET ' || attribute_name || ' = null WHERE RID = ' || instance_rid || ' ;';
    ELSE
    sql_query := 'UPDATE "TermOccurancy_e" SET ' || attribute_name || ' = '''|| attribute_value || '''
    WHERE RID = ' || instance_rid || ' ;';
    END IF;


    Ça ne revient pas a écrire NULL a la place de attribute_value seulement quand attribute_value est lui même a NULL ?

  6. #6
    Membre confirmé
    Profil pro
    Sr. Software Engineer
    Inscrit en
    Août 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Software Engineer

    Informations forums :
    Inscription : Août 2007
    Messages : 169
    Par défaut tjrs pas de solution
    en fait il affiche l'erreure suivante

    column "termoccurancy_e" does not exist.
    je ne comprends pas du tout car dans ma bd g vois bien la table en question

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'appel à une fonction de Shell32.dll sous win server 2008
    Par ludogoal dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 05/06/2009, 15h06
  2. Problème d'appel de fonction
    Par claralavraie dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/12/2005, 20h17
  3. Réponses: 7
    Dernier message: 10/09/2005, 16h49
  4. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 11h30
  5. Réponses: 4
    Dernier message: 19/04/2004, 13h41

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