2016-09-22 3 views
0
EXECUTE format(
'SELECT MAX(sum) 
FROM table 1 
WHERE %s = %s') INTO max_value USING id_column, id_value; 

Getting error: ERROR: operator does not exist: character varying = integer.Wie dynamisch auszuwählen, in Abfrage

Auch wenn ich versuche, den folgenden Code auszuführen:

update table1 set column2 = max_value + sum; 

ich einen anderen Fehler:

"ERROR: column "max_value" does not exist"

+0

Bitte zeigen Sie uns yo Ihre ** komplette ** Funktion. Für den ersten Teil der Frage: Sie sollten '% I' als Platzhalter für einen Spaltennamen und'% L' für den Wert verwenden. –

+0

Auf den ersten Blick - Sie müssen format() -Parameterwerte innerhalb von format() selbst nicht außerhalb hinzufügen (siehe https://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-FORMAT) . Zweitens beschäftigt sich Ihr Update mit der Variablen 'max_value' wahrscheinlich mit dem ersten Problem - dieser Variable wird niemals ein Wert aus dem dynamischen SELECT zugewiesen. –

Antwort

0

Sie diese verwenden können:

CREATE OR REPLACE FUNCTION maxvaloftable() 
RETURNS integer AS 
$BODY$ 

    DECLARE 

resultat integer = 2; 

BEGIN 

resultat= (SELECT MAX(sum) FROM table) ; 

RETURN resultat; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE STRICT 
    COST 100; 
ALTER FUNCTION maxvaloftable() 
OWNER TO postgres; 

update table1 set column2 = (select maxvaloftable()) + sum; 
Verwandte Themen