sql >> Database >  >> RDS >> PostgreSQL

Pl/pgSQL er is geen parameter $1 in de EXECUTE-instructie

Je hebt hier een paar problemen. Het directe probleem is:

Dat gebeurt omdat $1 in de SQL die u aan EXECUTE overhandigt, is niet hetzelfde als $1 binnen het hoofdfunctielichaam. De genummerde tijdelijke aanduidingen binnen de EXECUTE SQL bevinden zich in de context van de EXECUTE, niet in de functie-context, dus u moet enkele argumenten voor EXECUTE opgeven voor die tijdelijke aanduidingen:

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

Zie Dynamische opdrachten uitvoeren in de handleiding voor details.

Het volgende probleem is dat je niets teruggeeft van je functie die RETURNS integer . Ik weet niet wat je van plan bent terug te sturen, maar misschien je tablea heeft een SERILE id dat je terug wilt. Zo ja, dan wil je meer zoals dit:

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 uw functie.




  1. hoe mysql-trigger te schrijven?

  2. hoe kan ik een reeks recent ingevoegde records-ID's krijgen?

  3. Zal het verplaatsen van gegevens van EBS naar tijdelijke opslag de prestaties van MySQL-query's verbeteren?

  4. PostgreSQL v13-implementatie en schalen met ClusterControl 1.8.2