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



Pdf көрінісі
бет174/177
Дата15.02.2022
өлшемі2,58 Mb.
#25567
түріУчебное пособие
1   ...   169   170   171   172   173   174   175   176   177
Изменение  и  удаление  типов
.  Для  изменения  объектного  типа  ис-
пользуется  оператор ALTER TYPE, который  можно  использовать  для 
перекомпиляции описания или тела объектного типа, либо для добавле-
ния в тип новых методов.  
Команда ALTER TYPE имеет следующий синтаксис: 
ALTER TYPE имя_типа COMPILE [SPECIFICATION | BODY]; 
где  имя_типа – имя  изменяемого  типа.  С  помощью  этой  команды 
можно  перекомпилировать  спецификацию  или  тело  типа,  которые  в 
скомпилированном виде хранятся в словаре данных.  Если не указывает-
ся  ни SPECIFICATION, ни BODY, то  перекомпилироваться  будут  как 
 
198


 
описание, так и тело типа. Например, следующая команда вызывает пе-
рекомпиляцию тела типа BOOK_T: 
ALTER   TYPE    BOOK_T    COMPILE   BODY; 
Перекомпиляция объекта может потребоваться в случае, когда объект 
в результате изменения связанных с данным объектом других объектов. 
Другая форма команды ALTER TYPE используется для добавления к 
типу новых методов. Она имеет следующий синтаксис: 
ALTER TYPE имя_типа REPLACE AS OBLECT 
(спецификация_объектного_типа); 
где  имя_muna – это  имя  объектного  типа,  а  специфика-
ция_объектного_типа – полное  описание  типа,  определенное  командой 
CREATE TYPE. Новое описание должно во всем, кроме дополнительных 
методов, совпадать с исходным. Должны быть указаны первоначальные 
атрибуты и типы. Если тело типа уже существует, оно становится недос-
товерным, поскольку в нем не описаны новые методы.  
Использование команды ALTER TYPE ... REPLACE AS OBLECT ил-
люстрируется  на  следующем  примере.  Запросим  статус  объекта 
BOOK_T. 
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS 
FROM USER_OBJECTS 
WHERE OBJECT_NAME = 'BOOK_T';    
В  результате  получим  сообщение  о  достоверности  заголовка  и  тела 
объекта BOOK_T. 
OBLECT_NAME     OBJECT_TYPE    STATUS 
-------------------------------------------------------------- 
BOOK_T                     TYPE                  VALID 
BOOK_T                     TYPE BODY        VALID 
Изменим тип, добавив к нему новый метод. При этом тело типа стано-
вится недостоверным.  
ALTER  TYPE BOOK_T  REPLACE AS OBJECT   
(  ID  NUMBER(2),                   -- код книги 
   TITLE  VARCHAR2(15),      -- название книги 
   AUTHOR  VARCHAR2(15), -- фамилия автора 
   PRICE  NUMBER(7),   -- цена книги 
--Возвращает фамилию автора и название книги. 
   MEMBER FUNCTION FORMATTED_NAME 
 
199


 
RETURN VARCHAR2, 
--Обновляет поле PRICE значением, указанным в поле NEW_PRICE. 
   MEMBER  PROCEDURE  CHANGE_PRICE 
   (NEW_PRICE  IN  NUMBER), 
--Возвращает код книги 
MEMBER FUNCTION BOOK_ID  RETURN NUMBER 
); 
Запросим еще раз статус объекта BOOK_T.  
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS 
FROM USER_OBJECTS 
WHERE OBJECT_NAME = 'BOOK_T';    
В  результате  получим  сообщение  о  недостоверности  тела  объекта 
BOOK_T. 
OBLECT_NAME     OBJECT_TYPE      STATUS 
---------------------------------------------------------------- 
BOOK_T                     TYPE                  VALID 
BOOK_T                      TYPE BODY        INVALID 
Пересоздадим тело типа BOOK_T с добавленным новым методом.  
CREATE    OR    REPLACE    TYPE    BODY    BOOK_T    AS  
MEMBER    FUNCTION    FORMATTED_NAME 
RETURN    VARCHAR2    IS  
BEGIN 
RETURN    SELF.AUTHOR||SELF.TITLE;  
END    FORMATTED_NAME; 
MEMBER PROCEDURE CHANGE_PRICE 
(NEW_PRICE  IN  NUMBER)   IS  
BEGIN 
PRICE := NEW_PRICE;  
END   CHANGE_PRICE; 
MEMBER FUNCTION BOOK_ID RETURN NUMBER IS 
     BEGIN 
          RETURN ID; 
END BOOK_ID; 
END;  
Запросим статус объекта BOOK_T. 
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS 
 
200


 
FROM USER_OBJECTS 
WHERE OBJECT_NAME = 'BOOK_T';    
В  результате  получим  сообщение  о  достоверности  тела  объекта 
BOOK_T. 
OBLECT_NAME     OBJECT_TYPE    STATUS 
-------------------------------------------------------------- 
BOOK_T                     TYPE                  VALID 
BOOK_T                      TYPE BODY        VALID 
Команда DROP TYPE используется  для  удаления  объектного  типа  и 
имеет следующий синтаксис: 
DROP TYPE имя_типа [FORCE]; 
При этом если используется опция FORCE, то объектный тип удаля-
ется принудительно, несмотря на имеющиеся связи, и делая при этом не-
действительными все зависимое от него объекты. Если данный параметр 
отсутствует, то объектный тип будет удален только в том случае, если на 
него  нет  ссылок,  т.  е.  при  отсутствии  в  схеме  других  объектов,  завися-
щих от данного объектного типа. 
Команда  
DROP TYPE BODY имя_типа 
удаляет  только  тело  объектного  типа,  не  трогая  спецификацию  типа  и 
все зависимые от него объекты. 
 
201


 
 


Достарыңызбен бөлісу:
1   ...   169   170   171   172   173   174   175   176   177




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

    Басты бет