|
Программирование >> Oracle
1402 Глава 20 Вложенная таблица Для получения данных строки при использовании вложенных таблиц необходимо выполнять реляционное соединение. В случае небольших наборов это повлечет чрезмерное использование ресурсов. VARRAY Для получения данных массива VARRAY соединение выполнять не нужно. В случае небольших наборов данные хранятся в самой строке; если же наборы большие -в сегменте большого объекта. При обращении к элементам массива VARRAY требуется меньше ресурсов, чем при обращении к вложенной таблице. При изменении же данных массива VARRAY ресурсов требуется больше, чем при изменении вложенной таблицы, поскольку заменять приходится весь массив, а не один элемент. В представленной выше таблице указано, что массив VARRAY нельзя изменять с помощью SQL-операторов с конструкцией TABLE; его надо обрабатывать процедурно. Для изменения столбцов типа VARRAY лучше всего написать хранимую процедуру. Ее код может быть примерно таким: tkyte@TKYTE816> declare 7 8 9 10 11 12 13 14 15 16 end; 17 / address Array Type; l prev addresses begin select p.previous addresses from people p where p.name = Tom Kyte; into l prev addresses l prev addresses.extend; l prev addresses(l prev addresses.count) Address Type(12 3 Main Street, null, Reston , VA , 45678) ; update people set previous addresses where name = Tom Kyte; l prev addresses PL/SQL procedure successfully completed. tkyte@TKYTE816> select name, prev.city, prev.state, prev.zip code 2 from people p, table(p.previous addresses) prev
Мы рассмотрели преимущества и недостатки использования расширенных типов данных Oracle в таблицах базы данных. Вы должны решить, стоит ли ради возможности Использование объектно-реляционных средств 1403 создавать новые типы данных с однозначно реализованными методами обработки и использовать их в определениях столбцов, жертвовать возможностью развивать эти типы со временем (добавлять или удалять атрибуты).* Мы также сравнили использование массивов VARRAY и вложенных таблиц как способов физического хранения данных. Было показано, что массивы VARRAY больше подходят для хранения ограниченного набора упорядоченных элементов, чем вложен-н1е таблицы. Использовать массивы VARRAY очень удобно для хранения списка элементов, которому не требуется отдельная таблица. Избирательное использование новых типов существенно улучшает систему и ее структуру. Использование объектн1х типов Oracle в качестве типов столбцов таблиц (но не создание объектных таблиц, как было продемонстрировано в главе 6) позволяет обеспечить стандартизацию и вызов процедур (методов) с семантически правильными параметрами. Огорчает только невозможность существенно развивать тип данных схемы после того, как создана хотя бы одна таблица, в которой этот тип используется. Использование типов для расширения возможностей языка PL/SQL Именно в этом объектно-реляционные средства Oracle максимально преуспели. Язык PL/SQL - очень гибкий и мощный, как доказывает уже то, что механизм расширенной репликации (Advanced Replication) был написан полностью на PL/SQL еще в версии Oracle 7.1.6. Приложения из набора Oracle Applications (Human Resources - управление персоналом, Financial Applications - бухгалтерский учет, CRM applications - управление ресурсами и т.д.) разработаны в основном на PL/SQL. Хотя это и замечательный язык программирования, встречаются ситуации, когда его базовые возможности требуется расширить (как и в случае языков Java, С, С + + или любых других языков программирования). Это можно сделать с помощью объектных типов. Они добавляют новые функциональные возможности в PL/SQL, как классы - в языках Java или С++. В этом разделе я продемонстрирую, как использовать объектные типы для упрощения программирования на PL/SQL. Будет создан тип данных File на основе средств пакета UTL FILE. UTL FILE - это стандартный пакет, поставляемый в составе сервера Oracle и позволяющий выполнять в PL/SQL операции ввода-вывода (чтение и запись) текстовых данных в файлы на сервере. Он обеспечивает функциональный интерфейс, аналогичн1й семейству f-функций языка С (fopen, fclose, Iread, Iwrite и т.д.). Функцио-нальн1е возможности пакета UTL FILE будут инкапсулированы в простой в использовании объектный тип. Создание нового типа данных PL/SQL Пакет UTL FILE возвращает записи PL/SQL (данные типа RECORD). Это несколько усложняет работу, но проблему можно решить. Усложнение связано с тем, что объект-н1й тип SQL может содержать только SQL-типы, но не типы данных PL/SQL. Поэтому Хочу отметить, что в версии Oracle 9i ситуация принципиально меняется, поскольку появляется возможность развивать систему типов за счет наследования. - Прим. научн. ред. 1404 Глава 20 нельзя создать объектный тип, содержащий атрибут типа записи PL/SQL, но нам эю необходимо, чтобы инкапсулировать функциональные возможности существующего пакета. Чтобы решить эту проблему, придется создать вместе с типом небольшой PL/SQL-пакет. Начнем со спецификации типа - прототипа того, что мы планируем создать: tkyte@TKYTE816> create or replace type FileType 10 11 13 14 15 16 18 19 20 21 25 26 28 29 31 32 33 34 35 36 as object (g file name g path g file hc varchar2(255), varchar2(2 55), number. static function open(p path p file name p mode p maxlinesize return FileType, in varchar2, in varchar2, in varchar2 default r, in number default 32765) member function isOpen return boolean, member procedure close, member function get line return varchar2, member procedure put(p text in varchar2) , member procedure new line(p lines in number default 1) , member procedure put line(p text in varchar2) , member procedure putf(p fmt in varchar2, p argl in varchar2 default null, p arg2 in varchar2 default null, p arg3 in varchar2 default null, p arg4 in varchar2 default null, p arg5 in varchar2 default null) , member procedure flush.
Type created. Эта спецификация очень похожа на спецификацию пакета UTL FILE (если вы не знакомы с пакетом UTL FILE, можете прочитать о нем в приложении А). Он обеспечивает практически те же функциональные возможности, что и пакет UTL FILE, просто в более удобном (как мне кажется) виде. Помните, при рассмотрении создания типа ADDRESS TYPE я говорил, что каждый объектный тип имеет один стандартный конструктор и в этом конструкторе надо задать значения для всех атрибутов типа. Пользо-
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |