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;
お返事、アーウィンいただきありがとうございます。これはとても役に立ちました! 私はそのことを知らなかった。更新が進むのを許すものです。 – Pizzas
@Pizzas:[このマニュアルのこの章を読むことを検討する](https://www.postgresql.org/docs/current/static/plpgsql-trigger.html) –