---------------------------------------------------------------- ЧАСТЬ III ПРИЛОЖЕНИЯ ПРИЛОЖЕНИЕ A ---------------------------------------------------------------- НОВЫЕ ВОЗМОЖНОСТИ В ВЕРСИИ 2 В этом приложении выделены новые возможности PL/SQL, которые предоставляются версией 2. Эти возможности рассчитаны на то, чтобы помочь вам извлекать из PL/SQL максимум эффективности, скорости и гибкости. Новые возможности в версии 2 A-1 ---------------- Подпрограммы (глава 6) PL/SQL имеет два типа подпрограмм, которые называются процедурами и функциями. Подпрограммы способствуют разработке приложений за счет изолирования операций. Процедуры и функции - это поименованные блоки PL/SQL, которые принимают параметры и могут быть вызваны с возвратом. Обычно подпрограммы используются для выполнения действия, а функции - для вычисления значения. Подпрограмма, явно создаваемая (CREATE) с помощью инструмента ORACLE, называется хранимой подпрограммой. Такая подпрограмма, один раз откомпилированная и сохраненная в базе данных, является объектом базы данных, и к ней могут обращаться любые приложения, соединенные с этой базой данных. Процедуры и функции предоставляют расширяемость, позволяя привязывать средства PL/SQL к вашим потребностям. Они также спосоствуют надежности, сопровождаемости и производительности ваших приложений. ---------------- Пакеты (глава 7) PL/SQL поддерживает скрытие информации, модульность и многократную используемость, позволяя группировать взаимосвязанные типы, объекты и подпрограммы PL/SQL в единый пакет. Например, пакет может содержать коллекцию процедур, или набор определений типов и объявлений переменных. Приложениям видны и доступны лишь те объявления, которые сосредоточены в спецификации пакета. Детали реализации в теле пакета скрыты и недоступны. Однажды написанный, пакет компилируется и сохраняется в базе данных, где его содержимое может совместно использоваться многими приложениями. Когда вы вызываете пакетированную подпрограмму первый раз, в память загружается весь пакет. Поэтому последующие обращения к другим подпрограммам пакета не требуют операций дискового ввода-вывода. Тем самым, пакеты не только ускоряют продуктивность разработки, но и улучшают производительность. A-2 Руководство пользователя и справочник по PL/SQL ---------------- Новые предопределенные типы данных (глава 2) Каждая константа и переменная имеет тип данных, который определяет формат хранения, ограничения и диапазон допустимых значений. С целью достижения большей гибкости PL/SQL поддерживает разнообразные новые предопределенные типы данных. Базовые типы ------------ PL/SQL предоставляет несколько новых базовых типов: BINARY_INTEGER, VARCHAR2, RAW, LONG RAW, ROWID и MLSLABEL. Однако последний доступен лишь в Trusted ORACLE, специальной защищенной версии ORACLE. Тип данных BINARY_INTEGER позволяет хранить целые числа практически любого размера. PL/SQL представляет значения BINARY_INTEGER как знаковые двоичные числа, которые, в отличие от значений типа NUMBER, могут использоваться в вычислениях без преобразования. Поэтому применение переменных BINARY_INTEGER может резко увеличить производительность. Тип данных VARCHAR2 используется для хранения символьных данных переменной длины. Максимальная длина переменной типа VARCHAR2 составляет 32767 байт. Вы можете присваивать значения переменным VARCHAR2, передавать их символьным функциям, таким как LENGTH и SUBSTR, и манипулировать ими, используя предложения SELECT, INSERT, UPDATE и DELETE. Тип данных RAW используется для хранения двоичных данных или байтовых строк. Например, переменная RAW может содержать последовательность графических символов или оцифрованную картинку. PL/SQL не интерпретирует данных RAW. Максимальная длина переменной RAW составляет 32767 байт. Тип данных LONG RAW также используется для хранения двоичных данных или байтовых строк. Максимальная длина переменной LONG RAW составляет 32760 байт. Данные LONG RAW аналогичны данным LONG, с той разницей, что PL/SQL не интерпретирует данных LONG RAW. Внутренне, каждая таблица в базе данных ORACLE имеет псевдостолбец ROWID, в котором хранятся двоичные значения, называемые идентификаторами строк. Идентификатор строки предоставляет самый быстрый способ доступа к конкретной строке. PL/SQL предоставляет специальный тип данных, также называемый ROWID. Вы используете переменные типа ROWID для хранения идентификаторов строк в читабельном формате. Более того, вы можете манипулировать значениями ROWID с помощью функций CHARTOROWID и ROWIDTOCHAR. В Trusted ORACLE, вы используете тип данных MLSLABEL для хранения меток операционной системы. Trusted ORACLE использует такие метки для управления доступом к данным. Для более подробной информации обратитесь к документу Trusted ORACLE7 Server Administrator's Guide. Новые возможности в версии 2 A-3 Подтипы ------- Подтип ассоциирует базовый тип с ограничением, и тем самым определяет подмножество значений базового типа. Для удобства PL/SQL предоставляет следующие числовые подтипы: NATURAL, POSITIVE, DEC, DECIMAL, DOUBLE PRECISION, FLOAT, INT, INTEGER, NUMERIC, REAL и SMALLINT. Первые два являются подтипами BINARY INTEGER; остальные - подтипами NUMBER. Вы можете использовать подтипы NATURAL или POSITIVE, если хотите ограничить переменную неотрицательными целыми значениями. Вы можете использовать подтипы DEC, DECIMAL, DOUBLE PRECISION, FLOAT, INT, INTEGER, NUMERIC, REAL и SMALLINT для совместимости с типами данных ANSI/ISO, IBM SQL/DS и IBM DB2, или если предпочитаете более описательный идентификатор, нежели NUMBER. ---------------- Таблицы PL/SQL (глава 2) PL/SQL предоставляет два составных типа данных: TABLE и RECORD. Этот раздел обсуждает тип данных TABLE; тип данных RECORD рассматривается ниже. Объекты типа TABLE называются таблицами PL/SQL. Эти таблицы моделируют таблицы базы данных (но не являются таковыми). Таблицы PL/SQL используют первичный ключ, чтобы предоставить вам доступ к строкам по аналогии с массивом. Как и размер таблицы базы данных, размер таблицы PL/SQL не ограничивается. Иными словами, число строк в таблице PL/SQL может возрастать динамически. Поэтому ваша таблица PL/SQL растет по мере добавления в нее новых строк. Таблица PL/SQL может иметь один столбец и один первичный ключ, оба непоименованные. Столбец может принадлежать любому скалярному типу, но первичный ключ должен принадлежать типу BINARY_INTEGER. В будущих версиях PL/SQL таблицы PL/SQL смогут иметь несколько поименованных столбцов и составные первичные ключи любого типа. Как и скалярные переменные, таблицы PL/SQL могут объявляться как формальные параметры процедур и функций. A-4 Руководство пользователя и справочник по PL/SQL ---------------- Поддержка хост-массивов (глава 8) В среде прекомпилятора ORACLE можно передавать во встроенный блок PL/SQL входные хост-массивы и индикаторные массивы. Как и локально объявленную таблицу PL/SQL, хост-массив можно индексировать переменной PL/SQL типа BINARY_INTEGER, или хост-переменной, совместимой с этим типом. Обычно в PL/SQL передается весь хост-массив. Однако вы можете использовать предложение ARRAYLEN, чтобы специфицировать меньший размер массива. Кроме того, вы можете использовать вызов процедуры, чтобы заставить PL/SQL присвоить все значения хост-массива строкам таблицы PL/SQL. ---------------- Пользовательские записи (глава 2) В PL/SQL версии 1 вы могли использовать атрибут %ROWTYPE, чтобы объявить запись, которая будет представлять строку таблицы базы данных или строку, извлекаемую курсором. Однако вы не могли специфицировать типы полей в такой записи, или определить свои собственные поля. PL/SQL версии 2 снимает эти ограничения, предоставляя составной тип данных RECORD. Объекты типа RECORD называются записями. В отличие от таблиц PL/SQL, записи имеют уникально поименованные поля, которые могут принадлежать различным типам данных. Более того, пользовательские записи могут объявляться как формальные параметры процедур и функций. PL/SQL даже позволяет вам объявлять и ссылаться на вложенные записи. Иными словами, запись может быть компонентой другой записи. ---------------- Новые встроенные функции (глава 2) PL/SQL предоставляет несколько новых встроенных функций. Трансцендентные функции ----------------------- Трансцендентные функции включают тригонометрические, логарифмические и экспоненциальные функции. Тригонометрические функции подразделяются на обычные (SIN, COS и TAN) и гиперболические (SINH, COSH и TANH). Например, COS(n) возвращает косинус угла n, выраженного в радианах. Логарифмическая функция LN(n) возвращает натуральный логарифм числа n, где n больше 0. Функция LOG(m,n) возвращает логарифм по основанию m числа n, где m больше 1, а n больше 0. Экспоненциальная функция EXP(n) возвращает число e, возведенное в степень n, где e (приблизительно 2.71728) выражает основание натуральных логарифмов. Новые возможности в версии 2 A-5 Функции преобразования ---------------------- Функции преобразования конвертируют значение из одного типа данных в другой. В этой группе новыми функциями являются CHARTOROWID, ROWIDTOCHAR, HEXTORAW, RAWTOHEX и TO_LABEL. Например, CHARTOROWID преобразует символьное значение из типа CHAR или VARCHAR2 в тип ROWID. ---------------- Полная поддержка операций SQL (глава 4) PL/SQL поддерживает теперь все операции сравнения, множеств и строк, присущие SQL. Операторы сравнения ------------------- Операторы сравнения в фразе WHERE сравнивают одно выражение с другим и всегда возвращают TRUE, FALSE или NULL. Помимо прочих операторов сравнения, PL/SQL поддерживает операторы ANY (и его синоним SOME), ALL и EXISTS. Например, EXISTS Возвращает TRUE, если подзапрос возвращает хотя бы одну строку. Операторы множеств ------------------ Операторы множеств комбинируют результаты двух запросов в один результат. PL/SQL поддерживает операторы INTERSECT, MINUS, UNION и UNION ALL. Например, UNION возвращает все различающиеся строки, возвращенные любым из запросов. Операторы строк --------------- Операторы строк возвращают конкретные строки или обращаются к ним. PL/SQL поддерживает операторы ALL, DISTINCT и PRIOR. Например, DISTINCT устраняет повторяющиеся строки в результате запроса или в агрегатном выражении. ---------------- Удаленный доступ (главы 4, 6 и 7) PL/SQL позволяет вам обращаться к удаленным базм данных. Вы даже можете вызывать подпрограммы и обращаться к пакетам, хранящимся в удаленных базах данных. Чтобы обеспечить прозрачность адресации объектов удаленных баз данных, вы можете интерактивно, в SQL*Plus или SQL*DBA, создать синонимы для таких объектов. A-6 Руководство пользователя и справочник по PL/SQL ---------------- Поддержка советов оптимизатору (глава 4) Для каждого предложения SQL оптимизатор ORACLE генерирует план исполнения, представляющий собой ряд шагов, которые ORACLE предпринимает для выполнения этого предложения. PL/SQL позволяет вам предлагать ORACLE нужный способ оптимизации предложения SQL. Эти рекомендации, называемые советами (hints), позволяют вам влиять на решения, принимаемые оптимизатором. ---------------- Поддержка национальных языков (глава 4) ORACLE предоставляет поддержку национальных языков (NLS), которая позволяет вам использовать как 7- и 8-битовые, так и 16-битовые наборы символов. Более того, это средство автоматически преобразовывает данные из одного набора символов в другой. PL/SQL полностью поддерживает средство NLS, что позволяет вашим приложениям выполняться в различных языковых окружениях. ---------------- Новое ключевое слово DEFAULT (глава 2) Любые переменные PL/SQL, параметры или поля записи могут быть инициализированы в своих объявлениях. В действительности, константа ДОЛЖНА быть инициализирована в своем объявлении. PL/SQL позволяет вместо оператора присваивания использовать ключевое слово DEFAULT для инициализации констант, переменных и полей. Слово DEFAULT предпочтительнее, когда значение переменной или поля больше не будет изменяться.