1

金曜日の午後 5 時から月曜日の午前 9 時までの挿入を防止するトリガーを作成する必要があります。

sysdateから日付/時刻を抽出し、次のように何かをする必要があると考えて、正しい道を進んでいますか?

if
extract (day from sysdate) =>5 
AND extract (hour from sysdate) =>17 
AND extract (day from sysdate) =< 1 
AND extract (hour from sysdate) =<9
THEN
...

これが恐ろしく間違った道を進んでいる場合はお知らせください。

「曜日を指定する」の検索が無駄に終わるのはイライラします。おそらく誰かがより良い検索方法を提案できますか?

4

3 に答える 3

6

私は試してみます:

IF TO_NUMBER( TO_CHAR( SYSDATE, 'DHH24' ) ) > 516 OR
   TO_NUMBER( TO_CHAR( SYSDATE, 'DHH24' ) ) < 109 THEN

または単に

IF NOT TO_NUMBER( TO_CHAR( SYSDATE, 'DHH24' ) ) BETWEEN 109 AND 516 THEN

Dの値、曜日はローカル カレンダーに依存することに注意する必要があります。たとえば、週の最初の日は日曜日または月曜日である可能性があります。NLS 設定を確認してください。

于 2012-05-17T14:32:45.537 に答える
1

個人的には、コーディングしやすいように 3 つのスパンに分割したいと思います。

if(      -- Disallow all day Sat & Sun
         to_char( sysdate, 'fmDay' ) in ('Saturday', 'Sunday') )  
    or  (    to_char( sysdate, 'fmDay' ) = 'Friday'
         and extract( hour from sysdate ) >= 17) -- Disallow on Friday after 5
    or  (    to_char( sysdate, 'fmDay' ) = 'Monday'
         and extract( hour from sysdate ) < 9) -- Disallow on Monday before 9
   )
then

これは、NLS 設定が常に英語に設定されていることを前提としています。これをより一般的なものにすることもできますが、国が異なれば週の開始日も異なるため、より複雑になり始めます。

于 2012-05-17T14:31:26.350 に答える