2016-10-13 31 views
0

我想根據主鍵bill_key創建一個沒有返回值的函數來刪除名爲bill的表中的記錄。該列被稱爲bill_key。我的代碼是:刪除以PK爲參數的行的函數

CREATE OR REPLACE FUNCTION public.delete_bill(bill_key_to_delete bigint) 
RETURNS void AS 
$BODY$ 
begin 
    DELETE FROM bill 
    WHERE "bill_key" = bill_key_to_delete; 
    return; 
end; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 

我調用該函數:

select delete_bill(2); 

但該錯誤消息我得到的是:

select delete_bill(2) 
     ERROR: column reference "bill_key" is ambiguous 
     LINE 2: WHERE "bill_key" = bill_key_to_delete 
        ^
     DETAIL: It could refer to either a PL/pgSQL variable or a table column. 
     QUERY: DELETE FROM bill 
     WHERE "bill_key" = bill_key_to_delete 
     CONTEXT: PL/pgSQL function delete_bill(bigint) line 2 at SQL statement 
+0

如果使用限定列名稱(包括表別名),會發生什麼? –

+0

錯誤信息提示您沒有向我們展示函數的完整源代碼 –

回答

0

與別名嘗試對錶的名稱:

DELETE FROM bill b 
WHERE b."bill_key" = bill_key_to_delete; 

如果函數返回void類型,您應該使用PERFORM執行功能

PERFORM delete_bill(2); 
+0

'perform'只能在PL/pgSQL函數中使用。你不能通過「普通」的SQL來使用它 –