DATE в Oracle - это тип данных datetime.Тип данных TIME отсутствует.Поэтому, если вы хотите сохранить только время, вам нужно использовать строку.
create table airplane (
id number primary key
, plane_type varchar2(32) not null
, destination varchar2(32) not null
, flight_time varchar2(5) not null check (regexp_like(flight_time, '[0-9]{2}:[0-9]{2}'))
)
/
Ограничение проверки обеспечивает формат 99:99
.Если хотите, вы можете сделать более строгое.
У меня есть некоторое сочувствие к @AlexPoole, что мы должны использовать столбец DATE для хранения времени, потому что это облегчает обеспечение того, чтобы только действительные времена былипоступил.Но затем мы должны ограничить часть даты, чтобы убедиться, что это всегда одна и та же волшебная дата, и мы всегда должны применять маску формата всякий раз, когда мы запрашиваем таблицу, чтобы убедиться, что она отображает только время.Итак, мы что-то получаем, но мы также что-то теряем.
Есть и другие решения в стиле барокко.Вы можете определить flight_time как интервал:
, flight_time interval day to second
Тогда ваш оператор вставки будет
insert into airplane
values (1, 'Boeing 720-020','New York',INTERVAL '0 17:30:0' DAY TO SECOND);
Вы все еще хотите проверить, что элемент DAY равен нулю.И я думаю, что запрашиваемый вывод все еще нуждается в форматировании.
Но я подозреваю, что мы начинаем чрезмерно разрабатывать то, что кажется заданием курса.Так что придерживайтесь строки, если вам не нужно что-то лучшее,