В первой попытке вы пытаетесь создать ограничение inline . Нам разрешено ссылаться только на столбец-владелец во встроенном ограничении. Ваш оператор ALTER TABLE успешно выполняется, потому что он создает ограничение на уровне таблицы , а ограничения на уровне таблицы могут ссылаться более чем на один столбец.
Это дает нам подсказку, как исправить свой код, чтобы вы могли создать проверочное ограничение в операторе CREATE TABLE:
create table SP(Order_date date
,Dely_date date
,constraint dates_ck check(Dely_date > Order_date)
);
Обратите внимание на запятую перед ключевым словом constraint
: это делает его ограничением на уровне таблицы (вне строки). Также обратите внимание, что я назвал ограничение dates_ck
. Всегда полезно называть ограничения, но в этом случае это обязательно: мы не можем создать внешнее проверочное ограничение, не назвав его. (Попробуйте, и оно выдаст то же исключение ORA-02438.)