1

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

它给出了一个错误,例如

“开始”处或附近的语法错误

这里有什么问题?

4

1 回答 1

2

SQL功能没有BEGINEND喜欢的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. 基表中的数据类型有问题吗?

于 2012-12-28T07:54:46.817 回答