ここでいくつか問題があります。差し迫った問題は次のとおりです。
これは、$1
が原因で発生します EXECUTEに渡すSQL内は、$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
あなたの機能で。