【问题标题】: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 没有 BEGINENDplpgsql 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 看起来非常可疑。您的基表中的数据类型有问题吗?

    【讨论】:

      猜你喜欢
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 2022-01-11
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多