0
CREATE OR REPLACE TRIGGER Guest_Change_In_WorkingHour
       BEFORE INSERT OR UPDATE OR DELETE ON guest
    BEGIN
       IF  TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) < 8 -- cant do anything before 8:00am
           OR TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) >= 5
              -- changes must be made BEFORE 5:00pm
            OR TO_CHAR(SYSDATE,'dy') in ('sun','sat') THEN -- nothing on weekends
    RAISE_APPLICATION_ERROR (-20000, 'Satff changes only allowed during business hours.');
    END IF;
   END;
   /

このトリガーは、勤務時間中 (午前 8 時から午後 5 時まで) にデータの挿入、削除、および更新を実行できます。私の問題は、時刻が午前 4 時になっても、データを挿入、削除、および更新できることです。このトリガーは AM と PM を無視することがわかりました。の解き方?

4

1 に答える 1

2

あなたHH24は 24 時間 (米国では「軍事」だと思います) 時間である time format を使用しています。したがって、これを行う必要があります。

TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) >= 17

・・・というより使用しないで5ください。

しかし、そのままでは、08:00-17:00 の範囲外だけでなく、いつでもエラーが発生するはずです (非常に少数の数値が >= 8 と < 5 の両方であるため)。トリガーは実際にコンパイルされますか?

また、現時点では一致するとは思わないため、曜日を比較するために使用しているケースも確認する必要があります (修正 - はい、一致しますdy)。ただし、比較のために NLS に依存する値に依存することは理想的ではありません。

于 2012-07-19T16:14:31.127 に答える