【问题标题】:PostgreSQL sql function syntax error while writing function编写函数时PostgreSQL sql函数语法错误
【发布时间】:2012-12-13 12:34:03
【问题描述】:
我正在尝试编写一个 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;
它给出了一个类似
的错误
“开始”处或附近的语法错误
这里有什么问题?
【问题讨论】:
标签:
sql
postgresql
stored-procedures
sql-update
【解决方案1】:
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 本身看起来也错误。
- 没有 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 看起来非常可疑。您的基表中的数据类型有问题吗?