sql >> Databáze >  >> RDS >> PostgreSQL

Pl/pgSQL v příkazu EXECUTE není žádný parametr $1

Máte tady pár problémů. Bezprostřední problém je:

To se děje, protože $1 uvnitř SQL, které předáváte EXECUTE, není totéž jako $1 uvnitř těla hlavní funkce. Očíslované zástupné symboly v rámci EXECUTE SQL jsou v kontextu EXECUTE, nikoli v kontextu funkce, takže pro tyto zástupné symboly musíte zadat nějaké argumenty EXECUTE:

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

Viz Provádění dynamických příkazů podrobnosti naleznete v příručce.

Dalším problémem je, že nevracíte nic z vaší funkce, která RETURNS integer . Nevím, co máte v úmyslu vrátit, ale možná vaše tablea má SERIAL id že by ses chtěl vrátit. Pokud ano, pak chcete něco podobného:

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

ve vaší funkci.




  1. Opravdu nerozumím injekci mysql? Co je to?

  2. Jak mohu vybrat řádek na základě hodnoty priority v jiném řádku?

  3. CHYBA na řádku 191:ORA-01489:výsledek zřetězení řetězců je příliš dlouhý

  4. Android Studio 3.0 canary 1 :Chyba syntaxe SQL