PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Pl/pgSQL nie ma parametru $1 w instrukcji EXECUTE

Masz tutaj kilka problemów. Najpilniejszym problemem jest:

Dzieje się tak, ponieważ $1 wewnątrz kodu SQL, który przekazujesz do EXECUTE, nie jest tym samym, co $1 wewnątrz głównego korpusu funkcji. Ponumerowane symbole zastępcze w EXECUTE SQL znajdują się w kontekście EXECUTE, a nie w kontekście funkcji, więc musisz podać kilka argumentów do EXECUTE dla tych symboli zastępczych:

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

Zobacz Wykonywanie poleceń dynamicznych w instrukcji, aby uzyskać szczegółowe informacje.

Następnym problemem jest to, że nie zwracasz niczego z funkcji, która RETURNS integer . Nie wiem, co zamierzasz zwrócić, ale może Twoja tablea ma SERIAL id że chcesz wrócić. Jeśli tak, to chcesz czegoś bardziej takiego:

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

w swojej funkcji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instrukcja SQL nie usuwa się w PHP

  2. Zwróć rekordy różne w jednej kolumnie, ale posortuj według innej kolumny

  3. Ograniczenia dotyczące zmian schematu PostgreSQL w transakcjach?

  4. Używanie Kubernetes do wdrażania PostgreSQL

  5. Spring Boot data-jpa i nativeQuery Postgres cast