我正在尝试编写一个 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;
它给出了类似
的错误syntax error at or near "begin"
这里有什么问题吗?
最佳答案
SQL
functions没有像 plpgsql
functions 这样的 BEGIN
和 END
.
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
本身也看起来错误。
- 没有 WHERE 条件将
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
看起来非常可疑。您的基表中的数据类型有问题吗?
关于sql - 写函数时PostgreSQL sql函数语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14066203/