2012-12-28 112 views
1

我正在嘗試編寫一個Postgres函數。我這樣做的第一次,所以如果你發現了一些愚蠢的錯誤並不感到惱火:編寫函數時PostgreSQL sql函數語法錯誤

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; 

它是在給像

語法錯誤的錯誤或接近「開始」

這裏有什麼問題?

回答

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.userIdvarchar。在你的基表中關閉你的數據類型?