|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : août 2007 Messages : 167 ![]() |
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 |
|
|
00
|
|
|
#2 | |||
|
Membre chevronné
![]() Inscription : octobre 2003 Messages : 668 ![]() |
Citation:
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 :
SELECT update_term_attribute('15','ref_termentry_rid','30'); ++
__________________
Two beer or not two beer. (Shakesbeer) Question technique par MP => poubelle! |
|||
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : août 2007 Messages : 167 ![]() |
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 |
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() Inscription : octobre 2003 Messages : 668 ![]() |
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 :
RAISE NOTICE ' query : % ', sql_query;
(c'est toujours le même message d'erreur ?) ++
__________________
Two beer or not two beer. (Shakesbeer) Question technique par MP => poubelle! |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : août 2007 Messages : 10 ![]() |
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 ? |
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : août 2007 Messages : 167 ![]() |
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 |
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : août 2007 Messages : 167 ![]() |
finalement mon pb persite et je ne vois pas ou peut venir l'erreur car lorsue j'execute cette requete de MAJ ds qsl editor ca fonctionne. sans doute un pb de passage de paramètre.
alors est ce que quelqu'un peut m'ecrire une fonction en plpgsql qui prend en entrée le numero d'un tuple, une column , une valeur. et mais à jour la case correspondante tu tuple. ex: function maj(int num_tuple, varchar nom_colonne,vachar valeur) merci |
|
|
00
|
|
|
#8 | |
|
Membre habitué
![]() Inscription : août 2007 Messages : 128 ![]() |
Étant donné le message d'erreur que tu as donné, à savoir :
Citation:
Il serait bien qu'avant d'exécuter la requête, tu l'affiches dans les logs (instruction RAISE NOTICE, voir http://www.postgresql.org/docs/8.2/i...-messages.html pour les détails). Si le problème survient toujours, il faudrait que tu nous envoies ici le code actuel de la fonction, la requête qui l'exécute et le résultat complet (via psql par exemple). |
|
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : août 2007 Messages : 167 ![]() |
slt
finalement j'ai resolu mon pb. j'ai ecris la fonction suivant create or replace function(int ,text ,text) as DECLARE instance_rid ALIAS FOR $1; -- l_identifient du tuple attribute_name ALIAS FOR $2; -- le nom de la colonne attribute_value ALIAS FOR $3; -- la valeur à insérer BEGIN EXECUTE ' UPDATE table1 SET '|| quote_ident(attribute_name)|| ' = ' ||quote_literal(attribute_value)|| ' WHERE rid = ' ||quote_literal(instance_rid); END; language 'plpgsql'; un petit commentaire: quote_ident(text) et quote_literal(text) sont des fonctions prédéfinies de postgre. ensuite j'ai surchagé (coe on le fais en poo) cette fonction pour les diverse configuration d'utilisation dont j'aurai besoin. merci pour vos reponse
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com