1) Создать объектный тип можно либо в своей схеме (надо иметь полномочия CREATE TYPE) или в чужой схеме (для этого надо иметь полномочия CREATE ANY TYPE).
2) Описание атрибутов происходит так же, как и для типа записи, но запрещается задание значений по умолчанию.
3) Так как объектные типы хранятся в БД, то типы атрибутов должны быть только те, которые есть в языке SQL (но не в языке PL\SQL), причем помимо этого, запрещено использование типов данных: LONG, LONG ROW, NCHAR, NVARCHAR2, NCLOB.
4) Запрещается при указании типа атрибута использовать %TYPE, %ROWTYPE.
Методы MAP, ORDER – специальные методы, предназначенные для реализации упорядочения создаваемых на базе объектного типа реальных экземпляров объекта. При объявлении объектного типа можно использовать только один из этих методов. Когда создается объект, который является структурой, то необходимо определить порядок проверки условий, и именно MAP и ORDER устанавливают этот порядок. Если один из этих методов присутствует, то можно осуществить сравнение объектов не только в операторах SQL, но и в операторах PL\SQL. Если их нет, то объекты можно проверять только на эквивалентность и только в операторах SQL.
Метод MAP всегда представляется функцией, которая не имеет параметров, и типом возвращаемого значения которой могут быть только DATE, NUMBER, VARCHAR2. Ее смысл в том, что она на основании анализа данного объекта возвращает значение указанного типа, которое может быть использовано для упорядочивания объекта.
Метод ORDER всегда имеет два параметра: первый является встроенным (так называемый SELF), а второй параметр передается в эту функцию. В результате возвращается значение (типа DATE, NUMBER, VARCHAR2), по которому можно судить о соотношении этих двух переданных функции объектов. Вызов любой из этих функций происходит автоматически.
Любой метод объекта вызывается следующим образом: имя_объекта.имя_метода(…). Все, что касается списка параметров подчинено тем же правилам, как и для хранимых процедур и функций. Методы также могут быть перегружаемыми.
Если в момент выполнения метода возникает исключение, то процедура завершает свою работу, причем выходным параметрам типа OUT и IN OUT ничего не присваивается, если же были выполнены какие-то изменения в SELF, то они также ликвидируются.
После создания объектного типа при необходимости можно выполнить компиляцию его или отдельных частей, используя оператор:
ALTER TYPE имя_типа COMPILE
[SPECIFICATION| BODY]
Если для объектного типа используются какие-то объекты, и они претерпели изменения, то объектный тип становится недействительным, и его надо перекомпилировать.
Если необходимо добавить к данному типу спецификации новых методов, то используют оператор:
ALTER TYPE имя_типа REPLACE AS OBJECT
(спецификации)
но в спецификации необходимо повторить все спецификации старых методов и добавить новые методы.
Удаление объектного типа производится следующим оператором:
DROP TYPE [.схема] имя_типа [FORCE]
При этом, если используем опция FORCE, то объектный тип удаляется принудительно, несмотря на имеющиеся связи. Если данный параметр отсутствует, то объектный тип будет удален только в том случае, если на него нет ссылок.