PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Pl / pgSQL không có tham số $ 1 trong câu lệnh EXECUTE

Bạn có một vài vấn đề ở đây. Vấn đề trước mắt là:

Điều đó xảy ra bởi vì $1 bên trong SQL mà bạn đang chuyển giao cho EXECUTE không giống với $1 bên trong cơ thể chức năng chính. Các trình giữ chỗ được đánh số trong SQL EXECUTE nằm trong ngữ cảnh của EXECUTE, không phải trong ngữ cảnh của hàm, vì vậy bạn cần cung cấp một số đối số để THỰC HIỆN cho các trình giữ chỗ đó:

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

Xem Thực thi lệnh động trong sách hướng dẫn để biết chi tiết.

Vấn đề tiếp theo là bạn không trả về bất kỳ thứ gì từ hàm RETURNS integer của bạn . Tôi không biết bạn định trả lại cái gì nhưng có thể tablea của bạn có id SERIAL mà bạn muốn trở lại. Nếu vậy, bạn muốn một cái gì đó giống như thế này:

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

trong chức năng của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo vai trò PostgreSQL 9 với đăng nhập (người dùng) chỉ để thực thi các chức năng

  2. Tách chuỗi đã cho và chuẩn bị câu lệnh trường hợp

  3. Sử dụng CASE trong PostgreSQL để ảnh hưởng đến nhiều cột cùng một lúc

  4. Hợp nhất nhiều hàng thành một hàng có nhiều giá trị hàng trong một cột

  5. Cách đánh giá hiệu suất PostgreSQL bằng Sysbench