Учебное пособие Для студентов университетов Специальностей «Информатика», «Прикладная математика»



Pdf көрінісі
бет163/177
Дата15.02.2022
өлшемі2,58 Mb.
#25567
түріУчебное пособие
1   ...   159   160   161   162   163   164   165   166   ...   177
Создание объектного типа. 
Объектный тип состоит: 
1)  из описания (заголовка, спецификации) объектного типа; 
2)  тела объектного типа. 
В описании типа содержатся атрибуты и предварительные объявления 
методов, а тело состоит из определений методов. Каждая из этих частей 
компилируется  отдельно,  но  пока  не  будет  откомпилирован  заголовок 
объектного типа, не будет компилироваться и его тело. 
Для  создания  заголовка  объектного  типа  используется  следующий 
синтаксис: 
CREATE [OR REPLACE] TYPE [схема.] имя_типа  AS OBJECT 
(имя_атрибута тип_данных [, имя_атрибута тип_данных] …] 
[{MAP | ORDER} MEMBER  описание_функции] 
[MEMBER {описание_процедуры |  описание_функции} 
[, MEMBER {описание_процедуры |  описание_функции}]...]  
[PRAGMA RESTRICT_REFERENCES (имя_метода, ограничения)  
 
184


 
[, PRAGMA RESTRICT_REFERENCES (имя_метода, ограничения)]...] 
   …); 
где имя_типа – имя нового объектного типа, а схема – его владелец. Сна-
чала через запятую перечисляются атрибуты типа: 
имя_атрибута  тип_данных 
где  имя_атрибута – это  имя  атрибута,  а  тип_данных – встроенный  тип 
PL/SQL, или ранее определенный пользователем тип данных, или ссылка 
на объектный тип. После атрибутов указываются методы объектного ти-
па. При описании методов каждый из них, кроме последнего, отделяется 
запятой  и  выглядит  как  обычная  хранимая  подпрограмма PL/SQL с  до-
бавлением ключевого слова MEMBER.  
Прагма RESTRICT_REFERENCES используется для определения по-
рядка вызова метода из SQL-оператора. 
Для создания тела объектного типа используется следующий синтак-
сис: 
CREATE [OR REPLACE] TYPE  BODY  имя_типа  AS  
[{MAP | ORDER} MEMBER  определение_функции] 
[MEMBER {определение_процедуры |  определение_функции} 
[MEMBER {определение_процедуры |  определение_функции}]...]  
END; 
причем в теле объектного типа должны быть реализованы все объявлен-
ные в заголовке процедуры и функции.  
З а м е ч а н и я 
1.  При  создании  спецификации  или  тела  пакета  с  помощью 
SQL*PLUS,  необходимо  указывать  в  строке,  следующей  за  последним 
оператором, косую черту (/), чтобы оператор CREATE … TYPE выпол-
нился. 
2.  Описание  атрибутов  производится  так  же,  как  и  описание  полей 
типа  записи PL/SQL или  столбцов  таблицы  в  операторе CREATE 
TABLE, но в отличие от полей записи  атрибуты объектного типа нельзя 
ограничивать как NOT NULL и инициализировать значениями по умол-
чанию. 
3.  Так как объектные типы хранятся  в словаре данных, то типы дан-
ных для атрибутов должны быть только те, которые есть в языке SQL, за 
исключением  типов  данных: LONG, LONG RAW, NCHAR, NVAR-
CHAR2, NCLOB и ROWID. 
 
185


 
4.  Не  допускается  использование  типов  данных,  доступных  в  языке 
PL/SQL: BINARY_INTEGER, BOOLEAN, PLS_INTEGER, RECORD, 
REF CURSOR. 
5.  Запрещается  использование  в  атрибутах  объектного  типа  атрибу-
тов    %TYPE    и    %ROWTYPE,  но  разрешается  использование  атрибута 
%TYPE с атрибутами экземпляра объектного типа. 
6.  Функции MAP и ORDER используются  для  задания  порядка  сор-
тировки в данном объектном типе. Эти функции обсуждаются ниже. 
7.  Допускается  создание  объектных  типов  путем  предварительного 
объявления  типа,  которое  аналогично  предварительному  объявлению 
процедуры или метода: 
CREATE TYPE  имя_типа; 
8.  Тело объектного типа не может содержать операторы тех методов, 
которые не указаны в спецификации типа.  
Создадим объектный тип для сущности «книга». Атрибутами данного 
типа  являются  код  книги,  название  книги,  фамилия  автора,  цена  книги. 
Объявим два метода: FORMATTED_NAME и CHANGE_PRICE, первый 
из которых возвращает фамилию автора и название книги, а второй об-
новляет поле PRICE значением, указанным в поле NEW_PRICE. В каче-
стве  имени  объектного  типа  используем  идентификатор BOOK_T. Сле-
дующая  последовательность  операторов  создает  спецификацию  объект-
ного типа BOOK_T. 
CREATE  OR  REPLACE  TYPE  BOOK_T  AS  OBJECT 
(  ID  NUMBER(2),                     -- код книги 
   TITLE  VARCHAR2(15),        -- название книги 
   AUTHOR  VARCHAR2(15),   -- фамилия автора 
   PRICE  NUMBER(7),               -- цена книги 
   MEMBER FUNCTION FORMATTED_NAME 
   RETURN VARCHAR2, 
   MEMBER  PROCEDURE  CHANGE_PRICE 
   (NEW_PRICE  IN  NUMBER) 
); 
Создадим тело объектного типа BOOK_T: 
CREATE    OR    REPLACE    TYPE    BODY    BOOK_T    AS  
   MEMBER    FUNCTION    FORMATTED_NAME 
   RETURN    VARCHAR2    IS  
    BEGIN 
RETURN    SELF.AUTHOR||SELF.TITLE;  
 
186


 
   END    FORMATTED_NAME; 
   MEMBER PROCEDURE CHANGE_PRICE 
   (NEW_PRICE  IN  NUMBER)   IS  
   BEGIN 
PRICE := NEW_PRICE;  
   END   CHANGE_PRICE; 
END; 


Достарыңызбен бөлісу:
1   ...   159   160   161   162   163   164   165   166   ...   177




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет