Sie haben hier ein paar Probleme. Das unmittelbare Problem ist:
Das passiert, weil $1
innerhalb der SQL, die Sie an EXECUTE übergeben, ist nicht dasselbe wie $1
innerhalb des Hauptfunktionskörpers. Die nummerierten Platzhalter in EXECUTE SQL befinden sich im Kontext von EXECUTE, nicht im Kontext der Funktion, daher müssen Sie einige Argumente für diese Platzhalter an EXECUTE liefern:
execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
-- ^^^^^
Siehe Ausführen dynamischer Befehle Einzelheiten finden Sie im Handbuch.
Das nächste Problem ist, dass Sie von Ihrer Funktion nichts zurückgeben, was RETURNS integer
ist . Ich weiß nicht, was Sie zurückgeben möchten, aber vielleicht Ihre tablea
hat eine SERIELLE id
die Sie gerne zurückgeben möchten. Wenn ja, dann möchten Sie eher so etwas:
declare
tabla text := 'dpol' || extract(year from $5::timestamp);
id integer;
begin
execute 'insert into ... values ($1, ...) returning id' into id using dpol_cia, ...;
-- ^^^^^^^^^^^^ ^^^^^^^
return id;
end
in Ihrer Funktion.