挿入されるすべてのレコードの後にトリガーを実行する必要があります。
この検証は、次のような単純な挿入がある場合は正常に機能します。
insert into g_dossier values
(112334, 'BBT', 'LPO','TTS','Y') ;
ただし、次のようなバルクインサートのような場合:
INSERT INTO g_piece(
refpiece,
typpiece,
class_piece
group_piece
flag_piere)
SELECT :new.element_num,
PROC_TYPE,
DECODE( piece_it, 'F', 'FTTR', 'N', 'FTTR', NULL ),
DECODE( piece_it, 'T', 'TTSN', 'N', 'TTSN', NULL ),
'N'
FROM t_elements
WHERE :new.db_piece_flag = 'Y';
トリガーが変化します。一括挿入として実行した場合にも検証が機能するようにしたいと思います。
この問題の原因となるクエリは
SELECT COUNT(*)
INTO existing_cmcl_cnt
FROM g_piece cmcl
WHERE cmcl.class_piece= :new.class_piece
問題は、このクエリが同じテーブル「g_piece」に適用されたトリガーで呼び出されることです。単純な挿入(g_piecevalues(...)に挿入)を続行すると、この問題は発生しません。
この問題を回避するにはどうすればよいですか?ありがとう。