PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Pl/pgSQL няма параметър $1 в оператора EXECUTE

Тук имате няколко проблема. Непосредственият проблем е:

Това се случва, защото $1 вътре в SQL, който предавате на EXECUTE, не е същото като $1 вътре в основното функционално тяло. Номерираните контейнери в рамките на EXECUTE SQL са в контекста на EXECUTE, а не в контекста на функцията, така че трябва да предоставите някои аргументи на EXECUTE за тези контейнери:

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

Вижте Изпълнение на динамични команди в ръководството за подробности.

Следващият проблем е, че не връщате нищо от вашата функция, която RETURNS integer . Не знам какво възнамерявате да върнете, но може би вашата tablea има СЕРИЕН id че бихте искали да се върнете. Ако е така, тогава искате нещо по-подобно на това:

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

във вашата функция.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да се свържете с база данни на Postgres на Docker в Windows 10 с помощта на SQLAlchemy?

  2. Извикването на съхранена функция или процедура няма да вмъкне и да запази промените

  3. Ansible обича PostgreSQL

  4. PHP Свържете се с PostgreSQL с помощта на ssh2_tunnel

  5. Опишете набор от резултати в PostgreSQL?