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
. 基表中的数据类型有问题吗?