Работа с объектами Oracle8. Правила хорошего тона для инструментальных
систем
Е. Крылов, Interface Ltd.
Выпустив на рынок первую в мире объектно-реляционную СУБД Oracle8,
корпорация Oracle еще раз убедительно подтвердила свое лидерство в мире
"высокой моды" для систем обработки данных. Передовые производители инструментальных
систем тотчас же отреагировали на это выпуском новых версий. Delphi 4.0
обрела новые функции, предоставив программистам возможности для работы
с объектами Oracle8.
Delphi 4.0 содержит новые компоненты, позволяющие создавать эффективные
приложения с использованием новых подходов к построению структур данных.
Поскольку лидером в этой области является Oracle, то и все типы данных,
имеющиеся в Oracle8, поддерживаются и в Delphi 4.0. Корпорация Inprise
блестяще с этим справилась, целиком и полностью оправдав свою репутацию
лидера на рынке инструментальных средств. Вложенные таблицы пришли на смену
более сложным в обращении с ними отношениями "master- detail". Вместо того,
чтобы постоянно заботиться о правильности работы с такими конструкциями,
разработчики, имеющие дело с Oracle8, представляют себе единую конструкцию
вложенной таблицы, не особенно интересуясь, "а что там внутри?". Помимо
удобства использование вложенных таблиц принесло четырехкратное увеличение
производительности при работе с данными.
Вложенной таблицей называется реляционная таблица с неупорядоченными
элементами данных одного типа, которые встроены как столбцы в другую таблицу.
С вложенными таблицами можно выполнять такие же операции как с обычными
реляционными таблицами. Как уже было сказано выше, использование вложенных
таблиц позволяет избежать сложностей, которые возникают при использовании
отношений "master-detail". Содержательно это означает, что вместо некоторых
столбцов стоят другие, подчиненные таблицы.
Рассмотрим один пример. С помощью утилиты SQL*Plus Oracle8 создадим
такую таблицу для хранения данных по учебным курсам некоторого факультета.
(Этот пример заимствован из документации по Oracle8 Enterprise Edition
– желающие могут рассмотреть его более подробно, воспользовавшись ею).
Итак, определим объектный тип Course, набрав в командной строке SQL*Plus
следующий текст:
SQL> CREATE TYPE Course AS OBJECT (
2 course_no NUMBER(4),
3 title VARCHAR2(35),
4 credits NUMBER(1));
Затем определим тип CourseList как таблицу типа Course. Тип CourseList
предназначен для хранения объектов типа Course_Next:
SQL> CREATE TYPE CourseList AS TABLE OF Course;
И наконец создадим таблицу department , которая имеет столбец типа CourseList
:
SQL> CREATE TABLE department (
2 name VARCHAR2(20),
3 director VARCHAR2(20),
4 office VARCHAR2(20),
5 courses CourseList)
6 NESTED TABLE courses STORE AS courses_tab;
Каждый пункт в столбце courses представляет собой вложенную таблицу, которая
будет содержать информацию о курсах, предлагаемых факультетом (department).
Предложение NESTED TABLE необходимо, чтобы указать на то, что department
имеет столбец, являющийся вложенной таблицей. Запустив из Oracle SQL Worksheet
этот скрипт, сгенерируем в базе данных таблицу department со вложенной
таблицей courses.
Теперь рассмотрим на примере простейшего проекта, как организована
работа со вложенными таблицами в Delphi 4.0.
Создадим новый проект и поместим на форму компонент TDatabase.
Установим в свойстве DatabaseName имя базы данных, а в AliasName –
ее алиас.
Следующим шагом будет установка компонента TTable. Это делается примерно
так же как в предыдущих версиях Delphi. Отличие состоит в том, что в списке
свойств компонента появилось новое свойство ObjectView, которое для работы
с Oracle8 следует установить в состояние True.
После двойного щелчка мышью по изображению таблицы появится форма Form1.Table1.
Нажав на правую клавишу мыши, вызовем редактор полей (Field Editor), затем
из меню выберем поле AddFields и добавим поля все поля из таблицы department.
Для того, чтобы сделать доступными поля вложенной таблицы, поместим
на форму компонент NestedTable и в раскрывающемся списке для свойства DataSetField
выберем Table1COURSES.
Поместим на форму компонент DataSource1 и DataSource2, затем установим
их свойства DataSet в Table1 и NestedTable1 соответственно.
Для визуализации данных из таблиц поместим на форму компонент TBDgrid.
Установим его свойство DataSet в Table1, в таблице появятся данные.
Добавим компоненты для управления доступом к данным.
И, наконец, последний шаг – запуск приложения. В маленьком окне – данные
из вложенной таблицы, для доступа к которой нужно нажать на кнопку "..."
в столбце COURSES.
Interface Ltd.