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.