注文テーブルが
- に挿入
- 更新しました
また、挿入/削除/更新は、金曜日の午後5時から月曜日の午前9時まで無効にされていました。次のソリューションはこれをすべてカバーしていますが、これは変更前のトリガーであるため、整合性制約をオフにする必要がありました(これはログテーブルにとって重要ですか?)
誰かが私がこれを行うことができ、整合性制約(logono列)を維持する方法について何か提案がありますか?
私は11Gのcompuntトリガーについて考えていましたが、以前の回答では、これは適切な使用法ではなく、下位互換性の問題もあると推測されていました。
CREATE OR REPLACE TRIGGER log_order
BEFORE INSERT OR UPDATE OR DELETE ON orders
FOR EACH ROW
DECLARE out_of_hours EXCEPTION;
BEGIN
IF INSERTING THEN
IF
TO_NUMBER( TO_CHAR( SYSDATE, 'DHH24' ) ) BETWEEN 109 AND 517 THEN
insert into order_log values
(order_log_PK.nextval,
(select user from dual),
:NEW.ono,
(select SYSDATE from dual),
'Order Inserted' ) ;
ELSE
RAISE out_of_hours;
END IF;
END IF;
IF UPDATING THEN
IF
TO_NUMBER( TO_CHAR( SYSDATE, 'DHH24' ) ) BETWEEN 109 AND 517 THEN
insert into order_log values
(order_log_PK.nextval,
(select user from dual),
:NEW.ono,
(select SYSDATE from dual),
'order updated' ) ;
ELSE
RAISE out_of_hours;
END IF;
END IF;
IF DELETING THEN
IF
TO_NUMBER( TO_CHAR( SYSDATE, 'DHH24' ) ) BETWEEN 109 AND 517
THEN
RAISE out_of_hourS;
END IF;
END IF;
EXCEPTION
WHEN out_of_hours THEN
dbms_output.put_line('there is not privelages at this time');
RAISE_APPLICATION_ERROR(-20001, 'CANNOT UPDATE OUT OF HOURS');
END;
ありがとう
編集
整合性の問題は、ログテーブルに入力される:NEW.ono値が、beforeトリガーであるために注文テーブルにまだ挿入されておらず、logono外部キーに違反しているために発生しました。