Выбрать главу

END;

/ - ‘

Функция get_sell_by_date() вычисляет и показывает дату, до которой

можно продавать товар, складывая значение атрибута days_valid с текущей

датой. Текущая дата получается из базы данных путем вызова встроенной

в базу данных функции SYSDATE().

Для типа можно создать синоним и общедоступный синоним. В следующем

примере для t_product создается общедоступный синоним t_pub_

product:

□ CREATE PUBLIC SYNONYM t_pub_product FOR t_product;

Использование DESCRIBE для получения информации

об объектных типах

Для получения информации об объектных типах можно использовать команду

DESCRIBE. Следующие примеры иллюстрируют применение DESCRIBE

для типов t_address, t_person и t_product:

□ DESCRIBE t_address

Name Null? Type

STREET VARCHAR2(15)

CITY VARCHAR2(15)

STATE CHAR(2)

ZIP VARCHAR2(5)

DESCRIBE t_person

Name Null? Type

ID NUMBER

Объекты базы данных 399

FIRST_NAME VARCHAR2(10)

LAST_NAME VARCHAR2(10)

DOB DATE

PHONE VARCHAR2(12)

ADDRESS T_ADDRESS

DESCRIBE t_product

Name Null? Type

ID NUMBER(38)

NAME VARCHAR2(10)

DESCRIPTION VARCHAR2(22)

PRICE NUMBER(5,2)

DAYSJ/ALID INTEGER

METHOD

MEMBER FUNCTION GET_SELL_BY_DATE RETURNS DATE

Можно установить глубину, на которую команда DESCRIBE показывает

информацию, используя команду SET DESCRIBE DEPTH. В следующем примере

глубина показа устанавливается равной 2 , а затем еще раз выполняется

команда DESCRIBE t_person. На этот раз показываются атрибуты адреса (адрес

имеет тип t_address):

□ SET DESCRIBE DEPTH 2

DESCRIBE t_person

Name Null? Type

ID NUMBER

FIRST NAME VARCHAR2(10)

LAST NAME VARCHAR2(10)

DOB DATE

PHONE VARCHAR2( 12)

ADDRESS T ADDRESS

STREET VARCHAR2(15)

CITY VARCHAR2(15)

STATE CHAR(2)

ZIP VARCHAR2(5)

Использование объектных типов для определения

объектов-столбцов и объектных таблиц

Теперь, когда вы увидели, как создавать объектные типы, давайте посмотрим,

как использовать эти типы в таблицах базы данных. Можно использовать

объектные типы для определения столбцов таблицы, и такие столбцы

известны как объекты-столбцы. Вы также можете использовать объектный

тип для определения целой строки в таблице; такая таблица известна

как объектная таблица. Наконец, вы можете использовать ссылку на объект

для доступа к конкретной строке в объектной таблице; ссылка на объект

400 Глава 12

аналогична указателю в C++. В этом разделе вы увидите примеры объектов-

столбцов, объектных таблиц и ссылок на объект.

Объекты-столбцы

В следующем примере создается таблица products, содержащая столбец

product типа t_product. Эта таблица содержит также столбец quantity_in_

stock, который используется для хранения количества товара, имеющегося

в настоящее время на складе:

□ CREATE TABLE products (

product t.product,

quantity_in_stock NUMBER

);

При добавлении строки в эту таблицу вы обязаны использовать конструктор

для указания значений атрибутов для нового объекта t_product;

напомню, тип t_product был создан при помощи следующего выражения:

□ CREATE TYPE t.product AS OBJECT (

id NUMBER,

name VARCHAR2(15),

description VARCHAR2(22),

PRICE number(5, 2),

days.valid NUMBER,

— get_sell_by_date() показывает дату, до истечения которой

-- товар должен быть продан

MEMBER FUNCTION get.sell.by.date RETURN DATE

);

/

Конструктор является встроенным типом объектного типа и имеет такое

же имя, что и объектный тип; конструктор принимает параметры, которые

используются для установки атрибутов нового объекта. Конструктор

для типа t.product называется t.product и принимает пять параметров,

по одному для установки каждого из атрибутов; например, t_product( 1 ,

pasta, 20 oz bag of pasta, 3.95, 10 ) создаёт новый объект t.product и

устанавливает его id равным 1 , name в pasta, description в 20 oz bag o f pasta,

price в 3.95 и days_valid в 10.

Следующие выражения INSERT добавляют две строки в таблицу products;

обратите внимание на использование конструктора t.product для передачи

значений атрибутов для объектов столбца product:

□ INSERT INTO products (

product,

quantity.in.stock

) VALUES (

t_product(1, ‘ pasta’ , ‘ 20 oz bag of pasta’ , 3.95, 10),

50

);

INSERT INTO products (

product,

Объекты базы данных 401

quantity_in_stock

) VALUES (

t_product(2 , 'sardines’ , ‘ 12 oz box of sardines’ , 2 .99, 5 ),

25

);

Следующий запрос выбирает эти строки из таблицы products; обратите

внимание, что атрибуты объектов столбца products отображаются внутри

конструктора для t_product:

□ PRODUCT( ID, NAME, DESCRIPTION, PRICE, DAYS_VALID)

QUANTITY_IN_STOCK

T_PR0DUCT(1, ‘ pasta’ , ‘ 20 oz bag of pasta’ , 3.95, 10)

50

T_PR0DUCT(2, ‘ sardines’ , '12 oz box of sardines’ , 2.99, 5)

25

Вы также можете получить из таблицы отдельный объект столбца. Чтобы

сделать это, вы должны указать псевдоним таблицы, посредством которого