PL/SQL (tm)
User's Guide and Reference
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ И СПРАВОЧНИК

Version 2.0
Part Number 800-20-1292
December 1992
ORACLE (R)
Cooperative Server Technology for Transparent Data Sharing

PL/SQL User's Guide and Reference
Version 2.0
Part No.800-20-1292 December, 1992
Contributing Author: Tom Portfolio
Contributors: Steve Bobrowski, Peter Clare, Gray Clossman, Pierre Dufour, Steve Faris, Ken Jacobs, Ken Jensen, Bob Kooi, Brian Linden, Jeffrey Olkin, Terry Olkin, Ken Rudin, Phil Shaw, Tim Smith, Kevin Wharton
Copyright (c) 1988, 1992 Oracle Corporation. All rights reserved. Printed in Ireland
ORACLE, SQL*DBA, SQL*Forms, SQL*Menu, SQL*Net, SQL*Plus, and SQL*ReportWriter are registered trademarks of Oracle Corporation. ORACLE7, PL/SQL, Pro*C, SQL*Module, and Trusted ORACLE7 are trademarks of Oracle Corporation. IBM, DB/2 and SQL/DS are registered trademarks of International Business Machines Corporation.

ПРЕДИСЛОВИЕ

PL/SQL - это принадлежащее Oracle процедурное расширение SQL, языка реляционных баз данных. PL/SQL полностью интегрирует современные средства разработки программного обеспечения, такие как инкапсуляция данных, скрытие информации, переопределение имен и обработка исключений, и тем самым доставляет современное искусство программирования серверу ORACLE и разнообразным инструментам ORACLE.

Предназначенное для удовлетворения практических потребностей разработчиков программ, это руководство объясняет все концепции PL/SQL, и на простых примерах иллюстрирует все его грани. Оно предоставляет все сведения, необходимые для написания и выполнения кода PL/SQL.

Аудитория

Это руководство написано для программистов, создающих приложения для сервера ORACLE. Для эффективного использования этого документа вы должны обладать рабочим знанием: Замечание: Вы не найдете в этом документе инструкций по инсталляции или системно-специфичной информации. Сведения такого рода приводятся в руководствах по инсталляции ORACLE для вашей системы.

Что нового в версии 2?

Версия 2 PL/SQL предлагает целый массив улучшений и новых средств. Например, теперь вы можете использовать преимущества таких средств, как: Для дополнительной информации обратитесь к приложению A.

Как организовано это руководство

Это руководство разбито на три части: руководство пользователя, справочник по языку и приложения.
Руководство пользователя

Эта часть знакомит вас с 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. Эти слова должны записываться как показано, но могут задаваться и строчными буквами.
строчные
Строчными буквами показаны элементы, которые определяются пользователем (переменные, таблицы, параметры), и для которых вы должны подставить литерал или идентификатор.
пунктуация
Пунктуация должна кодироваться как показано.
отступы
Отступы помогают показать структуру, но не являются обязательными.

Синтаксическая нотация

В тексте этой книги (но не в синтаксических диаграммах) синтаксис PL/SQL описывается с помощью разновидности формы Бэкуса-Наура (БНФ), которая использует следующие обозначения:
[]
Квадратные скобки окружают необязательные элементы
{}
Фигурные скобки окружают элементы, из которых должен быть выбран только один.
|
Вертикальная черта разделяет альтернативы в квадратных или фигурных скобках.
...
Многоточие показывает, что предыдущий элемент может быть повторен.

Связанные публикации

Следующие публикации рекомендуется использовать вместе с этим руководством: Иногда в этой книге встречаются ссылки на другие руководства Oracle, содержащие специфичную для операционной системы информацию. Обычно такие руководства называются руководствами по инсталляции, однако их точные названия зависят от операционной системы и платформы. Относительно полного перечня публикаций, поддерживающих ORACLE, обратитесь к документу ORACLE Technical Publications Catalog, Part No.3903.

Ваши комментарии приветствуются

Сотрудники корпорации Oracle ценят ваши комментарии. При написании и пересмотре документации ваши мнения - это самая важная обратная связь, которую мы получаем. Используйте форму читательских комментариев, приведенную в конце этой книги, чтобы сообщить нам, что вам понравилось и что не понравилось в этой публикации Oracle. Если хотите, звоните нам по номеру (415)506-7000, или пишите нам по адресу:
                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