2010г.
Количество страниц: 800
Книга "Oracle PL/SQL. Для профессионалов" является подробнейшим руководством по языку PL/SQL, представляющему собой процедурное языковое расширение для SQL. В ней детально рассмотрены основы PL/SQL, структура программы, основные принципы работы с программными данными, а также методика применения операторов и инструкций для доступа к реляционным базам данных. Большое внимание уделяется вопросам безопасности, влиянию объектных технологий на PL/SQL и интеграции PL/SQL с XML и Java.
За последние 15 лет, в течение которых переиздается данная книга, она стала незаменимым руководством по PL/SQL для сотен тысяч программистов, как начинающих, так и профессионалов. Пятое издание книги полностью обновлено под версии Oracle11g Release 1 и 2.
Оглавление книги
Фейерштейн Стивен и Прибыл Билл "Oracle PL/SQL. Для профессионалов"
Предисловие........................................................................................... 22
Основные цели .............................................................................................................................23
Структура книги ..........................................................................................................................24
О содержании...............................................................................................................................24
Какие темы не рассматриваются ............................................................................................26
Платформа и версия ...................................................................................................................26
О программном коде...................................................................................................................27
Благодарности ..............................................................................................................................27
Часть I. Программирование на PL/SQL .............................. 33
Глава 1. Введение в PL/SQL .................................................................. 34
Что такое PL/SQL?.....................................................................................................................34
История PL/SQL .........................................................................................................................35
Истоки PL/SQL ...........................................................................................................................35
Улучшение переносимости приложений .........................................................................36
Улучшенная защита приложений и защита целостности транзакций ..................36
Скромное начало, постоянное усовершенствование ......................................................37
Итак, PL/SQL... ........................................................................................................................37
Интеграция с SQL ...................................................................................................................38
Управляющие конструкции и логические условия .....................................................39
Обработка ошибок ...................................................................................................................40
О версиях .......................................................................................................................................42
Новые возможности Oracle11g ...............................................................................................43
Оперативное переопределение (только Release 2) ......................................................43
Режим FORCE конструкции CREATE TYPE (только Release 2) ..........................44
Кэширование результатов функций .................................................................................44
Оператор CONTINUE ...........................................................................................................44
Последовательности в выражениях PL/SQL ................................................................45
Динамические расширения SQL ........................................................................................45
Новая низкоуровневая компиляция и типы данных SIMPLE ................................45
SecureFiles .................................................................................................................................46
Триггеры .....................................................................................................................................46
Автоматическая подстановка подпрограмм ...................................................................46
PL/Scope ....................................................................................................................................46
Иерархический профайлер PL/SQL.................................................................................47
Подробное отслеживание зависимостей .........................................................................47
Обращения к супертипам из субтипов .............................................................................47
Ресурсы для разработчиков PL/SQL ...................................................................................48
Книги о PL/SQL от O'Reilly ................................................................................................48
PL/SQL в Интернете ..............................................................................................................49
Несколько советов ......................................................................................................................50
Не торопитесь! ..........................................................................................................................50
Не бойтесь обращаться за помощью .................................................................................51
Поощряйте творческий (и даже радикальный) подход к разработке ...................52
Глава 2. Написание и запуск кода PL/SQL ........................................... 53
Перемещение по базе данных ..................................................................................................53
Создание и редактирование исходного кода......................................................................54
SQL*Plus .........................................................................................................................................55
Запуск SQL*Plus .......................................................................................................................56
Выполнение SQL-инструкции ............................................................................................58
Запуск программы на языке PL/SQL ..................................................................................58
Запуск сценария .......................................................................................................................60
Что такое "текущий каталог"? ............................................................................................61
Другие задачи SQL*Plus ........................................................................................................61
Обработка ошибок в SQL*Plus ............................................................................................65
Достоинства и недостатки SQL*Plus .................................................................................66
Выполнение базовых операций PL/SQL ............................................................................67
Создание хранимой программы..........................................................................................67
Выполнение хранимой процедуры ....................................................................................70
Вывод хранимых программ ..................................................................................................71
Управление привилегиями и создание синонимов хранимых программ ............72
Удаление хранимой программы ..........................................................................................73
Сокрытие исходного кода хранимой программы .........................................................74
Средства разработки для PL/SQL ........................................................................................74
Вызов кода PL/SQL из других языков ................................................................................75
C, с использованием прекомпилятора Oracle (Pro*C) ...............................................76
Java, с использованием JDBC ..............................................................................................78
Perl, с использованием Perl DBI и DBD::Oracle ...........................................................79
PHP, с использованием расширений Oracle ...................................................................80
PL/SQL Server Pages ..............................................................................................................81
Что же дальше? ............................................................................................................................82
Глава 3. Основы языка .......................................................................... 83
Структура блока PL/SQL .........................................................................................................83
Анонимные блоки ....................................................................................................................85
Именованные блоки................................................................................................................86
Вложенные блоки ....................................................................................................................87
Область действия .....................................................................................................................88
Уточнение ссылок на переменные и столбцы в командах SQL ...............................89
Видимость .....................................................................................................................................90
"Видимые" идентификаторы ..............................................................................................90
Уточненные идентификаторы .............................................................................................90
Уточнение идентификаторов именами модулей ..........................................................91
Набор символов PL/SQL .........................................................................................................92
Идентификатор ........................................................................................................................94
Зарезервированные слова .....................................................................................................95
Ключевые слова ........................................................................................................................95
Идентификаторы пакета STANDARD .............................................................................96
Пропуски и ключевые слова ................................................................................................96
Литералы .......................................................................................................................................97
NULL ...........................................................................................................................................98
Одинарные кавычки внутри строки ..................................................................................99
Числовые литералы ..............................................................................................................100
Логические (булевские) литералы ..................................................................................100
Точка с запятой как разделитель ..........................................................................................100
Комментарии ...............................................................................................................................101
Однострочные комментарии .............................................................................................101
Многострочные комментарии ...........................................................................................102
Ключевое слово PRAGMA .....................................................................................................102
Метки ............................................................................................................................................103
Часть II. Структура программы PL/SQL ........................... 107
Глава 4. Условные операторы и переходы ........................................ 108
Операторы IF ..............................................................................................................................108
Комбинация IF-THEN .............................................................................................................109
Конструкция IF-THEN-ELSE ...........................................................................................110
Конструкция IF-THEN-ELSIF .........................................................................................111
Ловушки синтаксиса IF ...........................................................................................................112
Оператор CASE ..........................................................................................................................113
Вложенные операторы IF ...................................................................................................113
Ускоренное вычисление ......................................................................................................114
Операторы и выражения CASE ............................................................................................115
Простые операторы CASE ..................................................................................................116
Поисковый оператор CASE ...............................................................................................118
Вложенные операторы CASE ............................................................................................120
Выражения CASE ..................................................................................................................120
Оператор GOTO ........................................................................................................................123
Оператор NULL .........................................................................................................................123
Удобочитаемость кода ..........................................................................................................124
Использование NULL после метки .................................................................................125
Глава 5. Циклы ..................................................................................... 126
Основы циклов ...........................................................................................................................126
Примеры разных циклов .....................................................................................................126
Структура циклов PL/SQL ....................................................................................................128
Простой цикл ..............................................................................................................................129
Завершение простого цикла: EXIT и EXIT WHEN ..................................................129
Эмуляция цикла REPEAT UNTIL ..................................................................................130
Бесконечный цикл .................................................................................................................131
Цикл WHILE ..............................................................................................................................131
Цикл FOR со счетчиком .........................................................................................................132
Правила для циклов FOR с числовым счетчиком .....................................................133
Примеры циклов FOR с числовым счетчиком ............................................................134
Нетривиальные приращения .............................................................................................135
Цикл FOR c курсором ..............................................................................................................135
Примеры цикла FOR с курсором .....................................................................................136
Метки циклов ..........................................................................................................................138
Оператор CONTINUE .............................................................................................................139
Полезные советы........................................................................................................................140
Используйте понятные имена для счетчиков циклов ..............................................140
Корректно выходите из цикла ...........................................................................................141
Получение информации о выполнении цикла FOR .................................................142
SQL-инструкция как цикл .................................................................................................143
Глава 6. Обработка исключений ........................................................ 146
Основные концепции и терминология обработки исключений ...............................146
Определение исключений ......................................................................................................148
Объявление именованных исключений ........................................................................148
Связывание имени исключения с кодом ошибки ..........................................................150
Именованные системные исключения ...........................................................................153
Область действия исключения .............................................................................................155
Инициирование исключений ................................................................................................156
Оператор RAISE ....................................................................................................................156
Процедура RAISE_APPLICATION_ERROR .............................................................157
Обработка исключений .......................................................................................................159
Встроенные функции ошибок ...........................................................................................160
Объединение нескольких исключений в одном обработчике ...................................163
Необработанные исключения ...............................................................................................163
Передача необработанного исключения ........................................................................163
Примеры передачи исключения .......................................................................................165
Продолжение выполнения после исключений ...............................................................166
Стандартизация обработки ошибок ....................................................................................168
Оптимальная организация обработки ошибок в PL/SQL ..........................................170
Часть III. Работа с данными в PL/SQL ............................. 173
Глава 7. Работа с данными в программах.......................................... 174
Присваивание имен ..................................................................................................................174
Обзор типов данных PL/SQL ...............................................................................................176
Символьные типы данных ..................................................................................................176
Числовые типы данных .......................................................................................................177
Дата, время и интервалы .....................................................................................................178
Логические данные................................................................................................................179
Двоичные данные...................................................................................................................179
Типы данных ROWID и UROWID .................................................................................179
Тип данных REF CURSOR ................................................................................................179
Типы данных для поддержки Интернета ......................................................................180
Типы данных "Any" ..............................................................................................................180
Пользовательские типы данных .......................................................................................181
Объявление программных данных ......................................................................................181
Объявление переменной .....................................................................................................181
Объявление константы ........................................................................................................182
NOT NULL ...............................................................................................................................183
Объявления с привязкой ....................................................................................................183
Привязка к курсорам и таблицам ....................................................................................185
Преимущества объявлений с привязкой .......................................................................186
Объявления с привязкой и ограничение NOT NULL ..............................................188
Подтипы данных, определяемые программистом..........................................................188
Преобразования типов данных .............................................................................................189
Неявное преобразование типов ........................................................................................189
Явное преобразование типов .............................................................................................191
Глава 8. Строки .................................................................................... 197
Строковые типы данных .........................................................................................................197
Тип данных VARCHAR2 .....................................................................................................198
Тип данных CHAR ................................................................................................................199
Строковые подтипы ..............................................................................................................200
О работе со строками ...............................................................................................................200
Определение строковых констант ...................................................................................200
Непечатаемые символы .......................................................................................................202
Конкатенация строк ..............................................................................................................203
Преобразование регистра ....................................................................................................204
Традиционный поиск и замена .............................................................................................206
Дополнение ..............................................................................................................................208
Усечение строк ........................................................................................................................210
Поиск и замена с использованием регулярных выражений.......................................211
Работа с пустыми строками ...................................................................................................221
Смешение значений CHAR и VARCHAR2 ...................................................................222
Краткая сводка строковых функций ..................................................................................225
Глава 9. Числа ...................................................................................... 233
Числовые типы данных ...........................................................................................................233
Тип NUMBER .........................................................................................................................233
Тип PLS_INTEGER ..............................................................................................................237
Тип BINARY_INTEGER .....................................................................................................238
Тип SIMPLE_INTEGER .....................................................................................................239
Типы BINARY_FLOAT и BINARY_DOUBLE ...........................................................239
Типы SIMPLE_FLOAT и SIMPLE_DOUBLE ............................................................241
Числовые подтипы ................................................................................................................241
Числовые преобразования .....................................................................................................242
Функция TO_NUMBER .....................................................................................................242
Функция TO_CHAR ............................................................................................................246
Функция CAST.......................................................................................................................251
Неявные преобразования ....................................................................................................252
Числовые операторы ................................................................................................................253
Числовые функции ...................................................................................................................254
Функции округления и усечения ........................................................................................254
Тригонометрические функции..............................................................................................255
Сводка числовых функций ....................................................................................................255
Глава 10. Дата и время ........................................................................ 261
Типы данных даты и времени ................................................................................................261
Объявление переменных даты и времени .....................................................................263
Получение текущей даты и времени...................................................................................264
Типы данных INTERVAL ........................................................................................................266
Объявление интервальных переменных .......................................................................267
Когда используются типы INTERVAL ...........................................................................268
Преобразование даты и времени ..........................................................................................270
Преобразование строк в даты ............................................................................................270
Преобразование даты в строку .............................................................................................272
Часовые пояса .........................................................................................................................275
Преобразование часовых поясов в символьные строки ...........................................277
Литералы типа DATE и TIMESTAMP ..............................................................................278
Преобразования интервалов ..................................................................................................279
Преобразование чисел в интервалы ................................................................................279
Преобразование строк в интервалы ................................................................................280
Форматирование интервалов для вывода .....................................................................281
Литералы типа INTERVAL .................................................................................................282
CAST и EXTRACT ....................................................................................................................283
Функция CAST.......................................................................................................................283
Функция EXTRACT .............................................................................................................285
Арифметические операции над значениями даты/времени ......................................286
Операции с типами TIMESTAMP и INTERVAL ........................................................286
Операции с типом DATE ....................................................................................................287
Вычисление интервала между двумя значениями DATE .......................................288
Смешанное использование DATE и TIMESTAMP ...................................................290
Сложение и вычитание интервалов ................................................................................291
Умножение и деление интервалов ...................................................................................292
Типы данных INTERVAL без ограничений ..................................................................292
Функции для работы с датой/временем ...........................................................................294
Глава 11. Записи .................................................................................. 297
Записи в PL/SQL ......................................................................................................................297
Преимущества использования записей .............................................................................298
Абстракция данных ...............................................................................................................298
Агрегатные операции ............................................................................................................299
Компактность и простота кода ..........................................................................................299
Объявление записей .................................................................................................................300
Записи, определяемые программистом .........................................................................301
Обработка записей ................................................................................................................304
Сравнение записей ................................................................................................................311
Триггерные псевдозаписи .......................................................................................................312
Глава 12. Коллекции ............................................................................ 313
Знакомство с коллекциями ....................................................................................................313
Концепции и терминология ...............................................................................................314
Разновидности коллекций ..................................................................................................315
Примеры коллекций .................................................................................................................316
Ассоциативный массив ........................................................................................................316
Вложенная таблица ...............................................................................................................317
VARRAY ...................................................................................................................................318
Использование коллекций .....................................................................................................320
Выбор типа коллекции ........................................................................................................325
Встроенные методы коллекций ............................................................................................327
Метод COUNT ........................................................................................................................328
Метод DELETE ......................................................................................................................329
Метод EXISTS ........................................................................................................................330
Метод EXTEND .....................................................................................................................331
Методы FIRST и LAST ........................................................................................................332
Метод LIMIT ...........................................................................................................................333
Методы PRIOR и NEXT .....................................................................................................333
Метод TRIM ............................................................................................................................334
Работа с коллекциями ..............................................................................................................335
Объявление типов коллекций ...........................................................................................336
Объявление и инициализация переменных-коллекций ..........................................339
Неявная инициализация путем непосредственного присваивания ....................340
Заполнение коллекций данными .....................................................................................343
Коллекции со строковыми индексами ...........................................................................347
Коллекции составных типов данных ..............................................................................348
Работа с коллекциями в SQL ................................................................................................348
Псевдофункция CAST .........................................................................................................349
Псевдофункция MULTISET .............................................................................................349
Псевдофункция TABLE ......................................................................................................351
Глава 13. Другие типы данных ........................................................... 353
Тип данных BOOLEAN ...........................................................................................................353
Тип данных RAW .......................................................................................................................354
Типы данных UROWID и ROWID .....................................................................................355
Получение идентификаторов строк ................................................................................356
Использование идентификаторов строк .......................................................................356
Большие объекты данных .......................................................................................................357
Работа с большими объектами ..............................................................................................359
Понятие локатора LOB ............................................................................................................359
Большие объекты - пустые и равные NULL ...............................................................361
Запись данных в объекты LOB .............................................................................................363
Чтение данных из объектов LOB......................................................................................365
Особенности типа BFILE....................................................................................................367
SecureFiles и BasicFiles .........................................................................................................369
Временные объекты LOB ....................................................................................................371
Функции преобразования объектов LOB .........................................................................374
Предопределенные объектные типы ..................................................................................375
Тип XMLType .........................................................................................................................375
Типы данных URI ......................................................................................................................378
Типы данных Any ......................................................................................................................379
Часть IV. SQL и PL/SQL ...................................................... 383
Глава 14. DML и управление транзакциями ...................................... 384
DML в PL/SQL ..........................................................................................................................385
Краткое введение в DML ........................................................................................................385
Атрибуты курсора для операций DML ..............................................................................388
Предложение RETURNING в DML-инструкции ......................................................389
DML и обработка исключений .........................................................................................390
DML и записи .........................................................................................................................391
Управление транзакциями .....................................................................................................394
Инструкция COMMIT ........................................................................................................395
Инструкция ROLLBACK ....................................................................................................395
Инструкция SAVEPOINT ...................................................................................................396
Инструкция SET TRANSACTION ..................................................................................396
Инструкция LOCK TABLE ................................................................................................397
Автономные транзакции .........................................................................................................398
Определение автономной транзакции ...........................................................................399
Правила и ограничения на использование автономных транзакций ..................399
Область видимости транзакций .......................................................................................400
В каких случаях следует применять автономные транзакции ..............................401
Создание механизма автономного протоколирования.............................................402
Глава 15. Выборка данных .................................................................. 405
Основные принципы работы с курсорами ........................................................................406
Терминология .............................................................................................................................407
Типичные операции с запросами и курсорами ............................................................408
Знакомство с атрибутами курсора.......................................................................................409
Ссылки на переменные PL/SQL в курсорах....................................................................410
Выбор между явным и неявным курсорами ....................................................................410
Работа с неявными курсорами ..............................................................................................411
Примеры неявных курсоров ..................................................................................................412
Обработка ошибок при использовании неявных курсоров ....................................412
Атрибуты неявных курсоров .............................................................................................415
Работа с явными курсорами ..................................................................................................416
Объявление явного курсора ...............................................................................................417
Открытие явного курсора ...................................................................................................420
Выборка данных из явного курсора ................................................................................421
Выборка после обработки последней строки ...............................................................422
Псевдонимы столбцов явного курсора ..........................................................................422
Закрытие явного курсора .......................................................................................................424
Атрибуты явных курсоров ..................................................................................................425
Параметры курсора ...............................................................................................................427
Инструкция SELECT...FOR UPDATE ..............................................................................429
Снятие блокировок инструкцией COMMIT ...............................................................430
Предложение WHERE CURRENT OF .........................................................................431
Курсорные переменные и REF CURSOR .........................................................................433
Объявление типов REF CURSOR ...................................................................................434
Объявление курсорной переменной ...............................................................................435
Открытие курсорной переменной ...................................................................................436
Выборка данных из курсорной переменной .................................................................437
Правила использования курсорных переменных ......................................................437
Правила соответствия типов строк, проверяемые во время выполнения .........439
Псевдоним объекта курсора ...............................................................................................439
Передача курсорных переменных в аргументах .........................................................440
Курсорные выражения .............................................................................................................441
Использование курсорных выражений .........................................................................442
Ограничения, связанные с курсорными выражениями ...........................................444
Глава 16. Динамический SQL и динамический PL/SQL ..................... 445
Инструкции NDS .......................................................................................................................445
Инструкция EXECUTE IMMEDIATE ..........................................................................445
Инструкция OPEN FOR .....................................................................................................448
Передача параметров ................................................................................................................450
Режимы передачи параметров ...........................................................................................451
Дублирование формальных параметров .......................................................................453
Передача значений NULL ...................................................................................................454
Работа с объектами и коллекциями ....................................................................................454
Динамический PL/SQL ..........................................................................................................457
Построение динамических блоков PL/SQL ................................................................457
Когда следует использовать DBMS_SQL.........................................................................459
Новые возможности Oracle11g .............................................................................................460
Функция DBMS_SQL.TO_REFCURSOR ...................................................................460
Функция DBMS_SQL.TO_CURSOR ............................................................................462
Усовершенствованная модель безопасности DBMS_SQL ......................................464
Часть V. Создание приложений PL/SQL ........................... 465
Глава 17. Процедуры, функции и параметры .................................... 466
Модульный код ..........................................................................................................................466
Процедуры ..................................................................................................................................468
Вызов процедуры ...................................................................................................................470
Оператор RETURN ...............................................................................................................470
Функции ......................................................................................................................................470
Структура функции ..............................................................................................................471
Типы возвращаемых данных ..............................................................................................472
Вызов функции .......................................................................................................................473
Оператор RETURN ...............................................................................................................474
Параметры ...............................................................................................................................474
Режимы передачи параметров ...........................................................................................475
Связывание формальных и фактических параметров в PL/SQL ........................476
Локальные модули ....................................................................................................................477
Преимущества локальных модулей ................................................................................478
Перегрузка модулей..................................................................................................................479
Преимущества перегрузки..................................................................................................480
Ограничения на использование перегрузки ................................................................480
Перегрузка числовых типов ...............................................................................................481
Опережающие объявления ....................................................................................................482
Дополнительные вопросы ......................................................................................................483
Вызов пользовательских функций в SQL .....................................................................484
Детерминированные функции ..........................................................................................485
Модульный подход - в жизнь!.............................................................................................486
Глава 18. Пакеты.................................................................................. 487
Для чего нужны пакеты? .........................................................................................................487
Демонстрация возможностей пакетов ...............................................................................488
Основные концепции пакетов ..............................................................................................491
Правила построения пакетов ................................................................................................492
Спецификация пакета ..........................................................................................................492
Инициализация пакетов ......................................................................................................494
Правила вызова элементов пакета.......................................................................................495
Работа с данными пакета ........................................................................................................496
Глобальные данные в сеансе Oracle .................................................................................496