PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Pl/pgSQL gibt es keinen Parameter $1 in der EXECUTE-Anweisung

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.