2016-10-13 5 views
0

Я хочу создать функцию без возвращаемого значения, чтобы удалить запись в таблице с именем bill на основе первичного ключа bill_key. Столбец называется 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; 

и если функция возвращает тип пустоты, вы должны использовать PERFORM для выполнения функции

PERFORM delete_bill(2); 
+0

'perform' доступен только в функции PL/pgSQL. Вы не можете использовать это через «простой» SQL –

 Смежные вопросы

  • Нет связанных вопросов^_^