Вы не можете сделать это в Oracle с проверочным ограничением. Проблема в том, что функции, используемые в проверочном ограничении, должны быть детерминированы c. То есть они должны возвращать одно и то же значение при одинаковых аргументах. Ясно, что sysdate
не удовлетворяет этому требованию, потому что его значение изменяется каждый раз.
Oracle накладывает это ограничение, потому что ограничение check
истинно не только при вставке (или изменении) данных в таблицы, но на все времена.
Вы можете делать, что хотите, используя триггер. Просто определите триггеры insert
и update
, чтобы предотвратить попадание неверных значений.