Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
RBD_END.DOC
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
548.35 Кб
Скачать

Хранение объектов в бд

Объекты можно хранить в БД. Для этого нужно создать таблицу, где в качестве типов полей можно указывать объекты. Ограничение: таблицы с объектами нельзя использовать в РБД и для удаленных БД.

Пример создания базы данных, содержащей объект:

CREATE TABLE numbers (rn Rational, … );

CREATE TABLE rat_nums OF Rational; - таблица будет содержать строки объектов, каждая колонка в строке связана с атрибутом объекта. С каждой строкой будет связан специальное поле, которое является ссылкой на объект и является уникальным для каждого сохраненного в таблице объекта.

INSERT INTO numbers(rn) VALUES (Rational (3,62)); - вставка объекта в таблицу.

Использование оператора select

Пример

SELECT n.rn.num INTO my_num FROM number n …;

rn – имя поля, num – имя атрибута, my_num – переменная, в которую помещается значение атрибута, number – имя таблицы, n – переменная типа данного объекта (создается автоматически). Сначала объект помещается в некоторую область памяти (n), которая связана с содержимым таблицы number.

Пример

CREATE TYPE Person AS OBJECT (

first_name varchar2(15),

last_name varchar2(15),

birthday DATE,

home_address Address,

phone_number varchar2(15));

/

CREATE TABLE Persons OF Person; - на базе объекта Person создаем таблицу

BEGIN

INSERT INTO employees

SELECT * FROM persons p WHERE p.last_name LIKE '%smith'

Пример использование оператора VALUE

INSERT INTO employess

SELECT VALUE (p) FROM persons p WHERE p.last_name LIKE '%smith' ;

Пример использование оператора VALUE

DECLARE

p1:person;

p2:person;

BEGIN

SELECT VALUE(p) INTO p1 from person p WHERE p.last_name='Kroll';

p2:=p1;

END;

Использование оператора REF

Оператор REF возвращает ссылки на объекты. Его использование подобно оператору VALUE.

Пример

Таблица person_ers будет содержать ссылки на объекты таблицы persons.

INSERT person_refs

SELECT REF(p) FROM persons p WHERE p.last_name LIKE '%smith';

Пример

DECLARE

p_ref REF PERSON;

my_last_name varchar2(15);

BEGIN

SELECT REF(p) INTO p_ref FROM persons p

WHERE p.last_name=my_last_name; - выбрали указатель на объект,

следующий за last_name=my_last_name

UPDATE person p SET p=Person('Jill','Anders','11-Nov-67',…) WHERE REF(p)=p_ref;

END;

Для того чтобы проверить существует объект или нет, нужно использовать специальную конструкцию IS DANGING.

Пример

BEGIN

UPDATE department SET manager=NULL WHERE manager IS DANGING;

END;

Использование оператора DEREF

Оператор DEREF - обратный оператору REF:

DECLARE

p1 Person;

p_ref REF Person;

name varchar2(15);

BEGIN

SELECT DEREF (p_ref) INTO p1 FROM dual;

name:=p1.last_name;

END;

Оператор DEREF нельзя применять как процедурную запись: p1:=DEREF(p_ref).

Правильный синтаксис при использовании ссылок:

table_alias.object_column.ref_attribute

table_alias – имя Alias таблицы, object_column – столбец в таблице, ref_attribute – поле в таблице.

Операторы REF можно использовать при создании объектов, из которых будет состоять другая таблица.

Пример

CREATE TYPE address as object (

street varchar2(35),

city varchar2(15),

state char(2),

zip_code integer);

/

CREATE TYPE Person as object(

first_name varchar2(15),

last_name varchar2(15),

birthday date,

home_address ref address,

phone_number varchar2(15));

/

CREATE TABLE persons of Person;

Столбец home_address содержит указатель на объект типа address, сохраненный в некоторой другой таблице.

Пример использования таблицы persons:

DECLARE

addr1 Address; - переменные типа объект Address, хранятся в памяти

addr2 Address;

BEGIN

SELECT DEREF(home_address) INTO addr1 FROM persons p

WHERE p.last_name='Lucas';

END;

Пример:

DECLARE

my_street varchar2(25);

BEGIN

SELECT p.home_address.street INTO mystreet FROM persons p

WHERE p.last_name='Lucas'; - прямое обращение к атрибуту

END;

Операция DEREF применяется к указателю объекта. При использовании поля объекта, операция DEREF применяется неявно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]