2016-10-03 1 views
0

zurückgeben Ich versuche, die Einfüge-ID innerhalb von EXECUTE zurückzugeben. Dies funktioniert gut:Wie man einen Wert innerhalb eines postgreSQL PL/pgSQL EXECUTE

CREATE OR REPLACE FUNCTION public.mytest2() 
    RETURNS INTEGER 
LANGUAGE plpgsql 
AS $function$ 
DECLARE 
    retval INTEGER; 
    RETURNING "DULid" INTO retval;'; 
BEGIN 
    INSERT INTO "dbUpdateLog" (notes) VALUES ($$hello$$) RETURNING "DULid" INTO retval; 
    RETURN retval; 
END; 
$function$ 

Wenn es jedoch im Inneren zu tun EXECUTE ich einen Fehler:

CREATE OR REPLACE FUNCTION public.mytest2() 
    RETURNS INTEGER 
LANGUAGE plpgsql 
AS $function$ 
DECLARE 
    retval INTEGER; 
BEGIN 
    EXECUTE 'INSERT INTO "dbUpdateLog" (notes) VALUES ($$hello$$) RETURNING "DULid" INTO retval;'; 
    RETURN retval; 
END; 
$function$ 

ich verwenden müssen auszuführen, wie die Abfragen dynamisch generiert werden. Dies ist der Fehler:

ERROR: syntax error at or near "INTO" 
LINE 1: ...Log" (notes) VALUES ($$hello$$) RETURNING "DULid" INTO retva... 

Wie kann ich einen Rückgabewert (speziell der Einsatz ID in diesem Fall) erhalten, wenn verwendet innerhalb EXECUTE?

Antwort

2

Verwendung execute... into...:

BEGIN 
    EXECUTE 'INSERT INTO "dbUpdateLog" (notes) VALUES ($$hello$$) RETURNING "DULid"' 
    INTO retval; 
    RETURN retval; 
END; 

Siehe Executing Dynamic Commands

+0

Ah, was für ein einzelnes fehl am Platze Zitat tun. Vielen Dank! –

Verwandte Themen