CREATE OR REPLECE TYPE dateonly	AS OBJECT ( value      DATE
CREATE OR REPLECE TYPE staff__assignment_o  AS OBJECT ( staff_id   NUMBER , start_on   DATEONLY , end_on     DATEONLY , recover at NUMBER
К сожалению, пока нет способа описания декларативных ограничений целостности для столбцов в таких объектах. Поэтому, хотя и можно создавать новые имена типов данных, мы не можем устанавливать ограничения на значения, которые могут принимать данные такого типа. Это серьезный недостаток, так как одним из основных назначений расширяемой системы типов Oracle было обеспечение (наконец-то) реализации доменов с помощью словаря данных Oracle.
Домен — это просто улучшенный тип данных. Мы могли бы иметь домен с именем staff_id, положительное ненулевое целое, которое используется как первичный ключ в таблице project_members. Мы можем, конечно, найти способ создания такого объектного типа, но еще не можем применить нужные ограничения целостности, что делает использование объектного типа всего с одним столбцом непривлекательным (или определенно невыгодным).
Каждый раз, когда мы создаем объектный тип, его члены должны иметь имена, поэтому dateonly — это не только простой синоним DATE. Синтаксис будет более понятен из простого примера:
CREATE TABLE events
( proj_id       NUMBER     NOT NULL REFERENCES projects , event_seq    NUMBER    NOT NULL , primary key (proj_id, event_seq)
, event_code    NUMBER     NOT NULL REFERENCES event__codes , event_date dateonly     NOT NULL ) ;
Теперь, чтобы поместить запись о событии в эту таблицу, мы должны использовать следующее предложение:
INSERT INTO events VALUES (1, 1, 1, dateonly (trunc(sysdate)) ;
Функция dateonly в этой строке является функцией-конструктором по умолчанию для объектного типа dateonly. Данная функция создается при создании соответствующего типа и не может быть переопределена. Это вновь разочаровывает, потому что, на первый взгляд, функция-конструктор предлагает естественный механизм ограничения присваиваемых значений. Если нам необходимо обратиться к event_date в списке SELECT или фразе WHERE, то мы должны сослаться на атрибут-член этого типа по имени. Например:
5. Объекты	101