INTERBASE トリガーの利用

解決


マー  2005-08-06 18:51:36  No: 16910  IP: 192.*.*.*

PRIMARY KEY制約で定義した列(列名:DATA_NO)に、ジェネレータ値をトリガーを利用して代入しようとしています。
プログラムでテーブルをINSERTしてPOSTすると『項目’DATA_NO’の値が必要です』とエラーになります。

-- トリガー --
SET TERM!!;
CREATE TRIGGER SET_DATA_NO FOR TABLE_A
BEFORE INSERT AS
BEGIN
  NEW.DATA_NO = GEN_ID(GEN_DATA_NO, 1);
END!!
SET TERM;!!


どのようにしたら、トリガーでジェネレータ値を”DATA_NO”に(NOT NULL属性の列に)代入できるのか分かりません。
どなたか教えてください。宜しくお願いします。

編集 削除
HOta  2005-08-07 14:07:58  No: 16911  IP: 192.*.*.*

>CREATE TRIGGER SET_DATA_NO FOR TABLE_A
でTABLE_Aに対してのトリガを表します。
>  NEW.DATA_NO = GEN_ID(GEN_DATA_NO, 1);
NEW,OLDは項目の更新前、更新後の値を表すので、
これで、DATA_NOにジェネレータ値が入っているはずです。

編集 削除
マー  2005-08-08 09:02:03  No: 16912  IP: 192.*.*.*

NULLな列に対して、トリガーを適用してみました。
うまくいきました。
NOT NULLな列に対しては、やはり『値が必要です』のエラーが返されます。

編集 削除
マー  2005-08-08 11:02:56  No: 16913  IP: 192.*.*.*

『値が必要です』
ということなので、DATA_NOに適当に値を入れてテーブルをPOSTしてみました。
エラーも返らず、ジェネレータ値も入ってました。
これでよかったのかな??
スッキリしない感じですが、解決です。

編集 削除