SQL関数BEGINにはand ENDlike plpgsqlfunctionsがありません。
CREATE FUNCTION proc_test(userId int)
RETURNS void AS
$func$
UPDATE pl_payroll
SET remarks = viw.remarks
FROM pl_payroll diff, viwPayDifference viw
WHERE diff.userid = cast(userId as varchar);
$func$ LANGUAGE sql;
あなたもそれ自体が間違っているUPDATEように見えます。
pl_payroll追加のテーブルに結合する WHERE 条件はありません。
- 2回目以降のご参加は不要です
pl_payroll。
- の 2 番目のオカレンス
userIdはテーブル修飾されておらず、おそらくあいまいです。
UPDATEマニュアルで構文を確認してください。次のようになります。
CREATE FUNCTION proc_test(userId int)
RETURNS void AS
$func$
UPDATE pl_payroll p
SET remarks = viw.remarks
FROM viwPayDifference viw
WHERE viw.userid = p.userId::varchar;
$func$ LANGUAGE sql;
余談ですが、 にキャストdiff.userIdする必要があるのは非常に疑わしいようですvarchar。ベース テーブルのデータ型に問題がありますか?