В каждой строке таблицы BOOK_S
находится экземпляр типа
BOOK_T, являющийся строкой, атрибуты которой определены в объект-
ном типе BOOK_T. Следовательно, в эту таблицу можно вводить только
объекты. Ниже приведен ряд примеров ввода объектов в таблицу
BOOK_S. Как указывалось выше вставка новых значений в таблицу
осуществляется через
функцию-конструктор.
INSERT INTO BOOK_S
VALUES (BOOK_T(10, 'Казаки', 'Толстой Л.',5000));
INSERT INTO BOOK_S
VALUES (BOOK_T(20, 'Война и мир', 'Толстой Л.',15000));
Объектные таблицы очень похожи на обычные реляционные таблицы.
Поэтому при заполнении объектной таблицы в целях сопряжения с
обычными реляционными таблицами, которые были до этого в БД, до-
пускается и обычная вставка при условии, что в списке атрибутов нет
других встроенных объектных типов. К примеру, можно ввести данные в
таблицу BOOK_S с помощью следующего оператора INSERT:
INSERT INTO BOOK_S
VALUES(30, 'Дюна', 'Герберт Ф.', 8000);
Во время такой модернизации различные реляционные таблицы мож-
но создать заново как объектные, причем существующие приложения
изменять вовсе не обязательно.
Операции DML, выполняемые над таблицами, в которых содержатся
объекты-строки, абсолютно идентичны реляционным операциям DML.
В операторах UPDATE и DELETE можно указывать объекты в каче-
стве переменных привязки. В этом случае операции DELETE и
UPDATE
можно выполнять, как над обычными реляционными таблицами. Пока-
жем это на примерах:
UPDATE BOOK_S SET TITLE = ’Дети Дюны’ WHERE ID = 30;
DELETE FROM BOOK_S WHERE ID = 30;
В запросе объект-строка может вести себя по-разному. Если просто
написать оператор вывода информации, перечислив все нужные атрибу-
ты, то система будет рассматривать их как обычный набор атрибутов, а
не объект, поскольку объектная таблица описывается точно так же, как и
реляционная. Поэтому для выбора объекта нужно использовать опера-
цию VALUE.
Операция VALUE (значение) возвращает объект. В качестве аргумен-
та VALUE используется переменная корреляции, которая в данном кон-
191
тексте представляет собой псевдоним таблицы. Использование VALUE и
обычного варианта запроса иллюстрируется в следующем примере:
DECLARE
CURRENT_ID BOOK_S.ID%TYPE;
CURRENT_TITLE BOOK_S.TITLE%TYPE;
CURRENT_AUTHOR BOOK_S.AUTHOR%TYPE;
CURRENT_PRICE BOOK_S.PRICE%TYPE;
CURRENT_BOOK BOOK_T;
BEGIN
SELECT * INTO CURRENT_ID, CURRENT_TITLE,
CURRENT_AUTHOR, CURRENT_PRICE FROM BOOK_S
WHERE ID = 10;
SELECT VALUE(B) INTO CURRENT_BOOK FROM
BOOK_S B WHERE ID = 10;
END;
При формировании объектной таблицы, где объекты – строки, каждо-
му объекту присваивается идентификатор.
Идентификатор объекта —
это уникальный указатель на устойчивый объект конкретного типа, ко-
торый однозначно определяет объект. Идентификаторы объектов уни-
кальны по всему пространству БД Oracle: два объекта не могут иметь
один и тот же идентификатор. Если даже объект удаляется, этот номер
никакому другому объекту никогда не присваивается. Идентификатор
объекта – это внутрисистемная структура; общее число идентификаторов
составляет 2
128
различных значений.
Идентификаторы объекта имеются только у объектов-строк и строк
объектных представлений. Если объект имеет идентификатор, на этот
объект можно ссылаться. Ссылка на объект описывается в разделе объ-
явлений или указывается в описании таблицы и выглядит следующим
образом:
имя_переменной REF объектный_тип,
где имя_переменной – это имя ссылки на объект, а объектный_тип – оп-
ределенный ранее объектный тип.
Ссылки на объекты можно указывать в блоках PL/SQL и в SQL-
операторах, используя при этом операции VALUE и REF.
Достарыңызбен бөлісу: