【发布时间】:2017-03-19 18:44:18
【问题描述】:
我正在 PostgreSQL 9.5 中编写一个触发器函数。当名为action_flag 的列从FALSE 更新为TRUE 时,会调用一个函数。
如果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;
【问题讨论】:
标签: postgresql sql-update plpgsql database-trigger