sql >> Database teknologi >  >> RDS >> PostgreSQL

Pl/pgSQL der er ingen parameter $1 i EXECUTE-sætningen

Du har et par problemer her. Det umiddelbare problem er:

Det sker fordi $1 inde i SQL'en, som du sender til EXECUTE, er ikke det samme som $1 inde i hovedfunktionslegemet. De nummererede pladsholdere i EXECUTE SQL er i konteksten af ​​EXECUTE, ikke i funktionens kontekst, så du skal angive nogle argumenter til EXECUTE for disse pladsholdere:

execute '...' using dpol_cia, dpol_tipol, dpol_nupol, dpol_conse, dpol_date;
--            ^^^^^

Se Udførelse af dynamiske kommandoer i manualen for detaljer.

Det næste problem er, at du ikke returnerer noget fra din funktion, som RETURNS integer . Jeg ved ikke, hvad du har tænkt dig at returnere, men måske din tablea har et SERIEEL id at du gerne vil vende tilbage. Hvis ja, så vil du have noget mere som dette:

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

i din funktion.




  1. Hvordan kan jeg rekursivt få det overordnede ID for rækker i denne MySQL-tabel?

  2. Brug af OPENQUERY med en Oracle-database til at forespørge om et datointerval

  3. Hvordan indsætter man et tidsstempel i Oracle?

  4. Heroku Permanent Database-legitimationsoplysninger