SQL功能没有BEGIN和END喜欢的plpgsql功能。
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 条件。
- 您无需
pl_payroll第二次加入。
- 第二次出现的
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. 基表中的数据类型有问题吗?