编写函数时PostgreSQL sql函数语法错误

时间:2012-12-28 07:32:41

标签: sql postgresql stored-procedures sql-update

我正在尝试编写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;

出现错误,如

  

语法错误在“开始”或附近

这里有什么问题?

1 个答案:

答案 0 :(得分:2)

SQL functions不要BEGINEND 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,这看起来非常可疑。您的基表中的数据类型有什么用?