1

CHECK 制約を使用して、日付が日曜日にならないようにすることは可能ですか? トリガーは使いたくない。

4

2 に答える 2

8

はい、チェック制約は、曜日が日曜日ではないことを確認できます。次に例を示します。

create table date_test (entry_date date);

alter table date_test add constraint day_is_not_sunday
      check ( to_char(entry_date,'DAY','NLS_DATE_LANGUAGE = ENGLISH') not like 'SUNDAY%'); 

-- SUNDAY の右側に空白があるため、文字列を一致させるには like または rtrim が必要です。

insert into date_test values(to_date('2008-10-12','YYYY-MM-DD')); --Sunday
insert into date_test values(to_date('2008-10-11','YYYY-MM-DD'));
insert into date_test values(to_date('2008-10-10','YYYY-MM-DD'));
insert into date_test values(to_date('2008-10-09','YYYY-MM-DD'));
insert into date_test values(to_date('2008-10-08','YYYY-MM-DD'));
insert into date_test values(to_date('2008-10-07','YYYY-MM-DD'));
insert into date_test values(to_date('2008-10-06','YYYY-MM-DD'));

日曜日の日付を挿入しようとすると、次のように表示されます。
ORA-02290: check constraint (SYS.DAY_IS_NOT_SUNDAY) violated

于 2008-10-12T22:05:51.550 に答える
1

実際の制約についてはわかりませんが、次の関数を使用できます。

TO_CHAR(sysdate, 'D'); 

曜日を整数として取得し、小さなチェックを行います

于 2008-10-12T22:03:00.077 に答える