2016-10-13 16 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を通してそれを使うことはできません –

関連する問題