我正在尝试编写Postgres函数。我是第一次这样做,所以如果你发现一些愚蠢的错误,不要感到恼火:
CREATE FUNCTION proc_test(userId int)
returns void
begin
UPDATE pl_payroll SET remarks =viw.remarks from pl_payroll
diff,viwPayDifference viw
where diff.userid = cast(userId as varchar);
end;
出现错误,如
语法错误在“开始”或附近
这里有什么问题?
答案 0 :(得分:2)
SQL
functions不要BEGIN
和END
plpgsql
functions。
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
加入其他表格。pl_payroll
。userId
的第二次出现不符合表限定且可能不明确。查看UPDATE
syntax in the manual。应该是这样的:
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
,这看起来非常可疑。您的基表中的数据类型有什么用?