Абстрактные типы данных в базе данных Oracle

Абстрактные типы данных SQL в базе OracleВ этой статье дается краткий обзор тех важных функциональных средств Oracle, которые помогают облегчать процесс объектно-ориентированного программирования. Центральную роль в объектно-ориентированном программировании в Oracle играют абстрактные типы (abstract types), также называемые объектными типами (object types). В отличие от обычных типов данных, абстрактные типы содержат не только структуру данных, но и необходимые для манипулирования ими функции и процедуры, объединяя данные и поведение.


Оглавление статьи[Показать]


Объектные типы похожи на другие объекты схемы и состоят из имени, атрибутов и методов. Они напоминают концепцию классов в C++ и Java. Предлагаемая Oracle поддержка для объектно-ориентированных функциональных средств, таких как типы, делает вполне возможной реализацию объектно-ориентированных механизмов наподобие инкапсуляции и абстракции при моделировании сложных объектов и процессов из реальной жизни. Вдобавок в Oracle поддерживается одиночное наследование определяемых пользователем типов SQL.

 

Команда CREATE TYPE

Объектные типы создаются пользователями и хранятся в базе данных подобно другим типам данных Oracle, например, VARCHAR2. Команда CREATE TYPE позволяет создавать абстрактный шаблон, соответствующий объекту реального мира. Ниже приведен пример применения этой команды:

SQL> CREATE TYPE person AS object
2 (name varchar2(30),
3 phone varchar2(20));
Type created.
SQL>

 

Объектная таблица

Объектные таблицы содержат объекты вроде типа person, который был создан в предыдущем разделе. Ниже приведен пример создания объектной таблицы:

SQL> CREATE TABLE person_table OF person;
Table created.
SQL>

Интересная часть заключается вот в чем. В объектных таблицах не бывает однозначных (содержащих одно значение) столбцов, как в обычных таблицах Oracle: все столбцы в них являются типами и потому могут хранить несколько значений. Объектные таблицы можно использовать для просмотра данных как в виде таблицы с одним столбцом, так и в виде таблицы с множеством столбцов, состоящей из компонентов объектного типа. Ниже приведен пример, показывающий, как можно вставлять данные в объектную таблицу: 

SQL> INSERT INTO person_table
2 VALUES
3 ('john smith', '1-800-555-9999');
1 row created.
SQL>

 

Коллекции

Коллекции (collections) идеально подходят для представления между данными отношений типа “один ко многим”. В Oracle поддерживаются два основных типа коллекций: массивы VARRAY и вложенные таблицы. Все они более детально рассматриваются в двух следующих разделах моей статьи.

 

Массивы VARRAY

Массив VARRAY представляет собой упорядоченную коллекцию данных. Каждый элемент в этом массиве имеет определенный индекс, который используется для получения к нему доступа. Ниже показано, как можно объявлять тип VARRAY

SQL> CREATE TYPE prices AS VARRAY (10) OF NUMBER (12,2);

 

Вложенные таблицы

Вложенная таблица (nested table) представляет собой упорядоченный набор элементов данных. Этот упорядоченный набор может относиться как к объектному типу, так и к какому-нибудь из встроенных типов Oracle. Ниже приведен простой пример: 

SQL> CREATE TYPE lineitem_table AS TABLE OF lineitem;

Для получения доступа к элементам коллекции с помощью SQL-кода можно использовать оператор TABLE, как показано в следующем примере. Здесь history — это вложенная таблица, а courses — столбец, в который требуется вставить данные: 

SQL> INSERT INTO
TABLE(SELECT courses FROM department WHERE name = 'History')
VALUES('Modern India');

 

Наследование типов

Создавать можно не только типы, но и иерархии типов, состоящие из родительских супертипов и дочерних подтипов, связанных с родительскими узами наследования. Ниже приведен пример создания подтипа из супертипа. Сначала создается супертип:

SQL> CREATE TYPE person_t AS OBJECT (
name varchar2(80),
social_sec_no number,
hire_date date,
member function age() RETURN number,
member function print() RETURN varchar2) NOT FINAL;

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

SQL> CREATE TYPE employee_t UNDER person_t
(salary number,
commission number,
member function wages () RETURN number,
OVERRIDING member function print () RETURN varchar2);

 

Операция CAST

Операция CAST позволяет делать две вещи: преобразовывать встроенные типы данных, а также преобразовывать значение типа-коллекции в другое значение типа-коллекции.

Ниже приведен пример применения операции CAST со встроенными типами данных: 

SQL> SELECT product_id,
CAST(description AS VARCHAR2(30))
FROM product_desc;

 

Вас заинтересует / Intresting for you:

Таблицы в базе данных Oracle: ...
Таблицы в базе данных Oracle: ... 1398 просмотров Ирина Светлова Mon, 28 Oct 2019, 06:37:30
Oracle Personal Edition
Oracle Personal Edition 5199 просмотров Надин Tue, 21 Nov 2017, 13:32:12
Oracle изменения изменений!
Oracle изменения изменений! 2268 просмотров Stas Belkov Tue, 21 Nov 2017, 13:18:46
Разница между базой данных и э...
Разница между базой данных и э... 2144 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:46
Войдите чтобы комментировать