PL/SQL - это принадлежащее Oracle процедурное расширение SQL, языка реляционных баз данных. PL/SQL полностью интегрирует современные средства разработки программного обеспечения, такие как инкапсуляция данных, скрытие информации, переопределение имен и обработка исключений, и тем самым доставляет современное искусство программирования серверу ORACLE и разнообразным инструментам ORACLE.
Предназначенное для удовлетворения практических потребностей разработчиков программ, это руководство объясняет все концепции PL/SQL, и на простых примерах иллюстрирует все его грани. Оно предоставляет все сведения, необходимые для написания и выполнения кода PL/SQL.
Эта часть знакомит вас с PL/SQL и показывает, как используются многие из его средств.
Глава 1: Общие сведения Эта глава охватывает основные средства PL/SQL и указывает на их преимущества. Она также знакомит вас с базовыми концепциями PL/SQL и общим видом программ PL/SQL.
Глава 2: Основные понятия Эта глава фокусируется на детальных аспектах PL/SQL. Обсуждаются следующие темы: лексические единицы, типы данных и их преобразования, выражения, присваивания, структура блоков, объявления, правила сферы, встроенные функции, таблицы PL/SQL и пользовательские записи.
Глава 3: Управляющие структуры Эта глава показывает вам, как структурировать поток управления в программе PL/SQL. Описывается условное, итеративное и последовательное управление. Вы узнаете, как применяются простые, но мощные управляющие структуры, такие как IF-THEN-ELSE и WHILE-LOOP.
Глава 4: Взаимодействие с ORACLE Эта глава описывает команды SQL, функции и операторы, которые позволяют вашей программе манипулировать данными ORACLE. Вы узнаете, как обращаться к удаленным базам данных, обрабатывать транзакции, управлять курсорами и обеспечивать целостность вашей базы данных.
Глава 5: Обработка ошибок Эта глава содержит основательное обсуждение средств обнаружения и обработки ошибок с помощью аппарата исключений PL/SQL. Обсуждаются: преимущества исключений, сопоставление встроенных и определенных пользователем исключений, обработка возбужденных исключений, распространение исключений и полезные способы программирования.
Глава 6: Подпрограммы Эта глава показывает, как писать и использовать подпрограммы, которые облегчают разработку прилоожений, изолируя общие операции. Обсуждаются: преимущества подпрограмм, процедуры, функции, упреждающие объявления, актуальные и формальные параметры, позиционная и ключевая нотации, режимы параметров, умалчиваемые значения параметров, алиасы, переопределение имен, рекурсия и хранимые подпрограммы.
Глава 7: Пакеты Эта глава показывает, как группировать взаимосвязанные типы, объекты и подпрограммы PL/SQL в пакет. Однажды написанный, ваш общецелевой пакет компилируется и сохраняется в базе данных ORACLE, где его содержимое может совместно использоваться многими приложениями.
Глава 8: Рабочие окружения
Эта глава описывает, как использовать PL/SQL в таких окружениях,
как SQL*Plus, прекомпиляторы ORACLE и интерфейс вызовов ORACLE
(OCI).
Справочник по языку
Эта часть служит справочным руководством по командам PL/SQL, синтаксису и семантике, соглашениям кодирования и сообщениям об ошибках.
Глава 9: Элементы языка Эта глава при помощи синтаксических диаграмм показывает, как формировать предложения PL/SQL из команд, параметров и других элементов языка. Кроме того, в этой главе приводятся соглашения по кодированию, замечания по использованию и краткие примеры, чтобы помочь вам быстро освоить PL/SQL.
Глава 10: Сообщения об ошибках В этой главе перечислены сообщения об ошибках, которые выдает PL/SQL. Для каждой ошибки приводятся ее возможная причина и корректирующее действие. Приложения
Эта часть содержит обзор новых средств, примеры программ, вспомогательную техническую информацию и перечень зарезервированных слов.
Приложение A: Новые средства в версии 2 Это приложение перечисляет новые средства, появившиеся в PL/SQL версии 2.
Приложение B: Примеры программ Это приложение предоставляет несколько типовых программ PL/SQL, которые могут служить вам основой для написания собственных программ. Приведенные примеры иллюстрируют важные понятия и средства PL/SQL.
Приложение C: Семантика сравнения и присваивания строк Это приложение объясняет семантические различия между базовыми типами CHAR и VARCHAR2. В ORACLE7 и PL/SQL версии 2 семантика типа данных CHAR несколько изменилась, чтобы привести ее в соответствие с текущим стандартом ANSI/ISO SQL.
Приложение D: Фраза WITH INTERFACE Это приложение показывает вам, как использовать фразу WITH INTERFACE, которая определяет интерфейс между PL/SQL и языками третьего поколения (3GL), такими как C, FORTRAN или Pascal. Этот интерфейс позволяет вашим 3GL-программам, с помощью продукта SQL*Module, вызывать процедуры PL/SQL, хранящиеся в базе данных ORACLE.
Приложение E: Зарезервированные слова Это приложение содержит список слов, зарезервированных в PL/SQL как служебные.
Это руководство использует следующие обозначения в примерах программ, диаграммах синтаксиса и форматах функций:
PL/SQL Product Manager
Oracle Corporation
500 Oracle Parkway
Redwood Shores, CA 94065
FAX: (415)506-7200
ЧАСТЬ I РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
ГЛАВА 1: Общие сведения.................................. 1-1
Основные свойства....................................... 1-2
Структура блоков...................................... 1-3
Переменные и константы................................ 1-4
Атрибуты.............................................. 1-5
Управляющие структуры................................. 1-7
Курсоры.............................................. 1-10
Обработка ошибок..................................... 1-12
Модульность.......................................... 1-13
Скрытие информации................................... 1-15
Архитектура............................................ 1-16
В сервере ORACLE..................................... 1-17
В инструментах ORACLE................................ 1-20
Преимущества PL/SQL.................................... 1-21
Поддержка SQL........................................ 1-21
Улучшенная продуктивность............................ 1-21
Улучшенная производительность........................ 1-22
Переносимость........................................ 1-23
Интеграция с ORACLE.................................. 1-23
ГЛАВА 2: Основы.......................................... 2-1
Кодовое множество....................................... 2-2
Лексические единицы..................................... 2-2
Разделители........................................... 2-3
Идентификаторы........................................ 2-4
Литералы.............................................. 2-7
Комментарии........................................... 2-9
Типы данных............................................ 2-10
BINARY_INTEGER....................................... 2-11
NUMBER............................................... 2-11
CHAR................................................. 2-12
VARCHAR2............................................. 2-13
LONG................................................. 2-14
RAW.................................................. 2-14
LONG RAW............................................. 2-15
BOOLEAN.............................................. 2-15
DATE................................................. 2-15
ROWID................................................ 2-16
MLSLABEL............................................. 2-16
Преобразования типов данных............................ 2-17
Явные преобразования типов........................... 2-17
Неявные преобразования типов......................... 2-18
Сопоставление неявных и явных преобразований......... 2-20
Значения DATE........................................ 2-20
Значения RAW и LONG RAW.............................. 2-20
Объявления............................................. 2-21
Использование DEFAULT................................ 2-22
Использование %TYPE.................................. 2-22
Использование %ROWTYPE............................... 2-23
Ограничения.......................................... 2-25
Соглашения об именах................................... 2-26
Синонимы............................................. 2-26
Сфера................................................ 2-26
Чувствительность к регистру букв..................... 2-27
Имена таблиц базы данных............................. 2-27
Имена столбцов базы данных........................... 2-28
Сфера и видимость...................................... 2-29
Присваивания........................................... 2-31
Булевские значения................................... 2-32
Значения базы данных................................. 2-32
Выражения и сравнения.................................. 2-33
Старшинство операторов............................... 2-33
Логические операторы................................. 2-35
Операторы сравнения.................................. 2-36
Оператор конкатенации................................ 2-37
Булевские выражения.................................. 2-38
Обработка пустых значений............................ 2-40
Встроенные функции..................................... 2-42
Функции сообщений об ошибках......................... 2-43
Числовые функции..................................... 2-44
Символьные функции................................... 2-46
Функции преобразования............................... 2-51
Календарные функции.................................. 2-56
Смешанные функции.................................... 2-59
Таблицы PL/SQL......................................... 2-62
Объявление таблиц PL/SQL............................. 2-62
Обращение к таблицам PL/SQL.......................... 2-64
Поддержка счетчика строк............................. 2-67
Вставка и извлечение строк........................... 2-68
Удаление строк....................................... 2-69
Пользовательские записи................................ 2-70
Объявление записей................................... 2-70
Обращение к записям.................................. 2-72
Вложенные записи..................................... 2-74
Преимущества записей................................. 2-75
ГЛАВА 3: Управляющие структуры........................... 3-1
Обзор................................................... 3-2
Условное управление: предложения IF..................... 3-2
IF-THEN............................................... 3-2
IF-THEN-ELSE.......................................... 3-3
IF-THEN-ELSIF......................................... 3-4
Советы................................................ 3-5
Итеративное управление: Предложения LOOP и EXIT......... 3-6
LOOP.................................................. 3-6
WHILE-LOOP............................................ 3-8
FOR-LOOP.............................................. 3-9
Последовательное управление: предложения GOTO и NULL... 3-14
Предложение GOTO..................................... 3-14
Предложение NULL..................................... 3-18
ГЛАВА 4: Взаимодействие с ORACLE......................... 4-1
Поддержка SQL........................................... 4-2
Манипулирование данными............................... 4-2
Управление транзакциями............................... 4-2
Функции SQL........................................... 4-3
Псевдостолбцы SQL..................................... 4-4
Столбец ROWLABEL...................................... 4-6
Операторы SQL......................................... 4-7
Советы оптимизатору................................... 4-8
Поддержка национальных языков........................... 4-9
Удаленный доступ....................................... 4-11
Прозрачность местоположения.......................... 4-11
Глобальные имена..................................... 4-12
Управление курсорами................................... 4-13
Явные курсоры........................................ 4-13
Атрибуты явного курсора.............................. 4-18
Неявные курсоры...................................... 4-23
Атрибуты неявного курсора............................ 4-23
Пакетированные курсоры............................... 4-26
Курсорные циклы FOR.................................. 4-27
Обработка транзакций................................... 4-29
Распределенные транзакции............................ 4-30
Использование COMMIT................................. 4-30
Использование ROLLBACK............................... 4-31
Использование SAVEPOINT.............................. 4-33
Неявные точки сохранения............................. 4-33
Завершение транзакций................................ 4-34
Использование SET TRANSACTION........................ 4-35
Переопределение умалчиваемой блокировки.............. 4-36
Как справляться с ограничениями на размер программы.. 4-39
Триггеры базы данных................................... 4-41
ГЛАВА 5: Обработка ошибок................................ 5-1
Общие сведения.......................................... 5-2
Преимущества исключений................................. 5-4
Предопределенные исключения............................. 5-5
Пользовательские исключения............................. 5-8
Объявление исключений................................. 5-8
Правила сферы......................................... 5-8
Использование EXCEPTION_INIT......................... 5-10
Использование raise_application_error................ 5-11
Переобъявление предопределенных исключений........... 5-11
Как возбуждаются исключения............................ 5-12
Использование предложения RAISE...................... 5-12
Как распространяются исключения........................ 5-13
Повторное возбуждение исключения....................... 5-16
Обработка возбуждаемых исключений...................... 5-17
Исключения, возбужденные в объявлениях............... 5-18
Исключения, возбужденные в обработчиках.............. 5-18
Переходы в обработчик и из него...................... 5-19
Использование SQLCODE и SQLERRM...................... 5-19
Необработанные исключения............................ 5-21
Полезные приемы........................................ 5-21
Продолжение работы после возбуждения исключения...... 5-21
Повторение транзакции................................ 5-22
ГЛАВА 6: Подпрограммы.................................... 6-1
Что такое подпрограммы?................................. 6-2
Где допускаются подпрограммы?......................... 6-3
Преимущества подпрограмм................................ 6-3
Процедуры............................................... 6-4
Функции................................................. 6-6
Предложение RETURN...................................... 6-8
Упреждающие объявления.................................. 6-9
Пакетированные подпрограммы.......................... 6-10
Фактические и формальные параметры..................... 6-11
Позиционная и именная нотация.......................... 6-12
Позиционная нотация.................................. 6-12
Именная нотация...................................... 6-12
Смешанная нотация.................................... 6-12
Моды параметров........................................ 6-13
IN................................................... 6-13
OUT.................................................. 6-13
IN OUT............................................... 6-14
Умалчиваемые значения параметров....................... 6-16
Проблема алиасов....................................... 6-17
Перекрытие имен........................................ 6-18
Ограничения.......................................... 6-19
Как разрешаются вызовы............................... 6-21
Рекурсия............................................... 6-23
Рекурсивные подпрограммы............................. 6-23
Взаимная рекурсия.................................... 6-26
Сравнение рекурсии и итерации........................ 6-27
Хранимые подпрограммы.................................. 6-28
Преимущества хранимых подпрограмм.................... 6-28
Вызов хранимых подпрограмм........................... 6-29
Удаленный доступ..................................... 6-30
Состояния подпрограмм и зависимости.................. 6-31
Создание хранимых подпрограмм........................ 6-32
ГЛАВА 7: Пакеты.......................................... 7-1
Что такое пакет?........................................ 7-2
Преимущества пакетов.................................... 7-4
Спецификация пакета..................................... 7-5
Обращение к содержимому пакета........................ 7-6
Тело пакета............................................. 7-7
Сравнение личных и общих объектов...................... 7-14
Перекрытие имен........................................ 7-14
Вызов пакетированных подпрограмм....................... 7-15
Ограничение.......................................... 7-16
Удаленный доступ..................................... 7-16
Состояния пакетов и зависимости........................ 7-16
Характеристики сессии................................ 7-17
Зависимости.......................................... 7-17
Пакет STANDARD......................................... 7-18
Пакеты, специфичные для продуктов...................... 7-19
Окружение ORACLE..................................... 7-19
Рекомендации........................................... 7-20
ГЛАВА 8: Исполнительные окружения........................ 8-1
Среда SQL*Plus.......................................... 8-2
Ввод анонимного блока................................. 8-2
Выполнение анонимного блока........................... 8-2
Создание скрипта...................................... 8-3
Загрузка и выполнение скрипта......................... 8-4
Вызов хранимых подпрограмм............................ 8-4
Среда прекомпилятора ORACLE............................. 8-5
Встраивание блоков PL/SQL............................. 8-5
Использование хост-переменных......................... 8-6
Использование индикаторных переменных................ 8-11
Использование псевдотипа VARCHAR..................... 8-14
Использование предложения DECLARE TABLE.............. 8-15
Использование опции SQLCHESK......................... 8-15
Использование хост-массивов с таблицами PL/SQL....... 8-16
Использование динамического SQL...................... 8-20
Имитация динамического SQL........................... 8-22
Вызов хранимых подпрограмм........................... 8-23
Среда OCI.............................................. 8-23
Вызов хранимых подпрограмм........................... 8-28
ЧАСТЬ II СПРАВОЧНИК ПО ЯЗЫКУ
Глава 9: Элементы языка.................................. 9-1
Использование синтаксических диаграмм................... 9-3
Как читать синтаксические диаграммы................... 9-3
Как кодировать предложение по синтаксической диаграмме 9-6
Предложение присваивания................................ 9-7
Блоки.................................................. 9-10
CLOSE.................................................. 9-17
Комментарии............................................ 9-18
COMMIT................................................. 9-19
Условия................................................ 9-21
Курсоры................................................ 9-25
DELETE................................................. 9-28
Прагма EXCEPTION_INIT.................................. 9-30
Исключения............................................. 9-32
EXIT................................................... 9-35
Выражения.............................................. 9-37
FETCH.................................................. 9-42
Атрибут %FOUND......................................... 9-46
Функции................................................ 9-48
GOTO................................................... 9-53
IF..................................................... 9-56
INSERT................................................. 9-59
Атрибут %ISOPEN........................................ 9-62
Литералы............................................... 9-64
LOCK TABLE............................................. 9-67
LOOP................................................... 9-69
Атрибут %NOTFOUND...................................... 9-75
NULL................................................... 9-77
OPEN................................................... 9-78
Пакеты................................................. 9-81
Таблицы PL/SQL......................................... 9-84
Процедуры.............................................. 9-87
RAISE.................................................. 9-92
Записи................................................. 9-94
Предложение RETURN..................................... 9-98
ROLLBACK.............................................. 9-100
Атрибут %ROWCOUNT..................................... 9-102
Атрибут %ROWTYPE...................................... 9-104
SAVEPOINT............................................. 9-106
SELECT INTO........................................... 9-107
SET TRANSACTION....................................... 9-110
Курсор SQL............................................ 9-111
SQLCODE............................................... 9-113
SQLERRM............................................... 9-114
Атрибут %TYPE......................................... 9-116
UPDATE................................................ 9-118
Переменные и константы................................ 9-121
ГЛАВА 10: Сообщения об ошибках........................... 10-1
ЧАСТЬ III ПРИЛОЖЕНИЯ
ПРИЛОЖЕНИЕ A: Новые средства в версии 2....................... A-1
ПРИЛОЖЕНИЕ B: Примеры программ................................ B-1
ПРИЛОЖЕНИЕ C: Семантика присваивания и сравнения строк........ C-1
ПРИЛОЖЕНИЕ D: Фраза WITH INTERFACE............................ D-1
ПРИЛОЖЕНИЕ E: Зарезервированные слова......................... E-1