Oracle 10gr2: предотвратить какие-либо даты, которые выпадают на воскресенье? - PullRequest
1 голос
/ 13 октября 2008

Можно ли использовать ограничение CHECK, чтобы предотвратить любую дату, которая выпадает на воскресенье? Я не хочу использовать триггер.

Ответы [ 2 ]

8 голосов
/ 13 октября 2008

Да, ограничение проверки может проверить, что день недели не воскресенье. Вот пример:

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%'); 

- Справа от Воскресенья есть пробелы, поэтому для соответствия строке требуется строка типа 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

1 голос
/ 13 октября 2008

Не уверен насчет фактического ограничения, но вы можете использовать функцию:

TO_CHAR(sysdate, 'D'); 

, чтобы получить день недели в виде целого числа, а затем сделать небольшую проверку для него

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...