1
我正在PostgreSQL 9.5中編寫觸發器函數。當名爲action_flag
的列從FALSE
更新爲TRUE
時,將調用一個函數。使用plpgsql更新函數中的列
如果order_num
在某個表中,那麼我希望從FALSE
到TRUE
的更新繼續。
否則,如果order_num
是在其他表中,那麼我想引發異常並阻止更新發生。
我需要幫助在我的IF
聲明中編寫UPDATE
。 ELSEIF
部分按預期運行。
CREATE OR REPLACE FUNCTION check_ingredient_availability()
RETURNS TRIGGER AS
$Body$
BEGIN
if (OLD.order_num IN (SELECT order_num
FROM can_prep_m_orders)) THEN
RAISE NOTICE 'This is a notice.';
--UPDATE meal_order
--SET actioned_flag=TRUE
--WHERE order_num=OLD.order_NUM;
--EXECUTE 'UPDATE meal_order
-- SET actioned_flag=TRUE
--WHERE order_num=$1'
--USING OLD.order_num;
RETURN NULL;
ELSEIF (OLD.order_num IN (SELECT order_num
FROM cannot_prep_m_orders)) THEN
RAISE EXCEPTION 'Missing ingredients. Cannot prepare order number %.',
OLD.order_num;
RETURN NULL;
ELSE
RETURN NULL;
END IF;
END;
$Body$ LANGUAGE plpgsql;
謝謝您的回覆,歐文。這非常有幫助! 我不知道那個RETURN NEW;是什麼允許更新繼續。 – Pizzas
@Pizzas:[請閱讀本手冊的這一章。](https://www.postgresql.org/docs/current/static/plpgsql-trigger.html) –