6-е изд. — СПб.: Питер, 2015. — 1024 с. — ISBN 978-5-496-01152-5.
Данная книга является подробнейшим руководством по языку PL/SQL,
представляющему собой процедурное языковое расширение для SQL. В
ней детально рассмотрены основы PL/SQL, структура программы,
основные принципы работы с программными данными, а также методика
применения операторов и инструкций для доступа к реляционным базам
данных. Большое внимание уделяется вопросам безопасности, влиянию
объектных технологий на PL/SQL и интеграции PL/SQL с XML и Java. За
последние 18 лет, в течение которых переиздается эта книга, она
стала незаменимым руководством по PL/SQL для сотен тысяч
программистов, как начинающих, так и профессионалов. Шестое издание
книги полностью обновлено под версию Oracle12c.
Оглавление
Предисловие
Основные цели
Структура книги
О содержании
Какие темы не рассматриваются
Платформа и версия
О программном коде
Использование примеров кода
Благодарности
От издательства Программирование на PL/SQL
Введение в PL/SQL
Что такое PL/SQL
История PL/SQL
Истоки PL/SQL
Улучшение переносимости приложений
Улучшенная защита приложений и защита целостности транзакций
Скромное начало, постоянное усовершенствование
Итак, PL/SQL
Интеграция с SQL
Управляющие конструкции и логические условия
Обработка ошибок
О версиях
Новые возможности PL/SQL в Oracle Database 12c
Ресурсы для разработчиков PL/SQL
Книги о PL/SQL от O’Reilly
PL/SQL в Интернете
Несколько советов
Не торопитесь
Не бойтесь обращаться за помощью
Поощряйте творческий (и даже радикальный) подход к разработке Написание и запуск кода PL/SQL
Перемещение по базе данных
Создание и редактирование исходного кода
SQL*Plus
Запуск SQL*Plus
Выполнение SQL-инструкции
Запуск программы на языке PL/SQL
Запуск сценария
Что такое «текущий каталог
Другие задачи SQL*Plus
Обработка ошибок в SQL*Plus
Достоинства и недостатки SQL*Plus
Базовые операции PL/SQL
Создание хранимой программы
Выполнение хранимой программы
Вывод хранимых программ
Управление привилегиями и создание синонимов хранимых программ
Удаление хранимой программы
Сокрытие исходного кода хранимой программы
Средства разработки для PL/SQL
Вызов кода PL/SQL из других языков
C, с использованием прекомпилятора Oracle (Pro*C
Java, с использованием JDBC
Perl, с использованием Perl DBI и DBD::Oracle
PHP, с использованием расширений Oracle
PL/SQL Server Pages
Что же дальше Основы языка
Структура блока PL/SQL
Анонимные блоки
Именованные блоки
Вложенные блоки
Область действия
Уточнение ссылок на переменные и столбцы в командах SQL
Видимость
Набор символов PL/SQL
Идентификатор
Ключевые слова
Пропуски и ключевые слова
Литералы
NULL
Одинарные кавычки внутри строки
Числовые литералы
Логические (булевские) литералы
Точка с запятой как разделитель
Комментарии
Однострочные комментарии
Многострочные комментарии
Ключевое слово PRAGMA
Метки Структура программы PL/SQL
Условные команды и переходы
Команды IF
Комбинация IF-THEN
Конструкция IF-THEN-ELSE
Конструкция IF-THEN-ELSIF
Ловушки синтаксиса IF
Вложенные команды IF
Ускоренное вычисление
Команды и выражения CASE
Простые команды CASE
Поисковая команда CASE
Вложенные команды CASE
Выражения CASE
Команда GOTO
Команда NULL
Удобочитаемость кода
Использование NULL после метки Циклы
Основы циклов
Примеры разных циклов
Структура циклов PL/SQL
Простой цикл
Завершение простого цикла: EXIT и EXIT WHEN
Моделирование цикла REPEAT UNTIL
Бесконечный цикл
Цикл WHILE
Цикл FOR со счетчиком
Правила для циклов FOR с числовым счетчиком
Примеры циклов FOR с числовым счетчиком
Нетривиальные приращения
Цикл FOR c курсором
Примеры цикла FOR с курсором
Метки циклов
Команда CONTINUE
Полезные советы
Используйте понятные имена для счетчиков циклов
Корректно выходите из цикла
Получение информации о выполнении цикла FOR
Команда SQL как цикл Обработка исключений
Основные концепции и терминология обработки исключений
Определение исключений
Объявление именованных исключений
Связывание имени исключения с кодом ошибки
Именованные системные исключения
Область действия исключения
Инициирование исключений
Команда RAISE
Процедура RAISE_APPLICATION_ERROR
Обработка исключений
Встроенные функции ошибок
Объединение нескольких исключений в одном обработчике
Необработанные исключения
Передача необработанного исключения
Продолжение выполнения после исключений
Написание раздела WHEN OTHERS
Построение эффективной архитектуры управления ошибками
Определение стратегии управления ошибками
Стандартизация обработки разных типов исключений
Коды ошибок, связанные с конкретным приложением
Стандартизация обработки ошибок
Работа с «объектами» исключений
Создание стандартного шаблона для обобщенной обработки ошибок
Оптимальная организация обработки ошибок в PL/SQL Работа с данными в PL/SQL
Работа с данными в программах
Присваивание имен
Обзор типов данных PL/SQL
Символьные типы данных
Числовые типы данных
Дата, время и интервалы
Логические данные
Двоичные данные
Типы данных ROWID и UROWID
Тип данных REF CURSOR
Типы данных для поддержки интернет-технологий
Типы данных «Any
Пользовательские типы данных
Объявление данных в программе
Объявление переменной
Объявление константы
NOT NULL
Объявления с привязкой
Привязка к курсорам и таблицам
Преимущества объявлений с привязкой
Синхронизация со столбцами таблицы базы данных
Объявления с привязкой и ограничение NOT NULL
Подтипы данных, определяемые программистом
Преобразования типов данных
Неявное преобразование типов
Явное преобразование типов Строки
Строковые типы данных
Тип данных VARCHAR
Тип данных CHAR
Строковые подтипы
О работе со строками
Определение строковых констант
Непечатаемые символы
Конкатенация строк
Преобразование регистра
Традиционный поиск и замена
Дополнение
Усечение строк
Поиск и замена с использованием регулярных выражений
Работа с пустыми строками
Смешение значений CHAR и VARCHAR
Краткая сводка строковых функций Числа
Числовые типы данных
Тип NUMBER
Тип PLS_INTEGER
Тип BINARY_INTEGER
Тип SIMPLE_INTEGER
Типы BINARY_FLOAT и BINARY_DOUBLE
Типы SIMPLE_FLOAT и SIMPLE_DOUBLE
Числовые подтипы
Числовые преобразования
Функция TO_NUMBER
Функция TO_CHAR
Округление при преобразовании чисел в символьные строки
Функция CAST
Неявные преобразования
Числовые операторы
Числовые функции
Функции округления и усечения
Тригонометрические функции
Сводка числовых функций Дата и время
Типы данных даты и времени
Объявление переменных даты и времени
Выбор типа данных
Получение текущей даты и времени
Типы данных INTERVAL
Объявление интервальных переменных
Когда используются типы INTERVAL
Преобразование даты и времени
Преобразование строк в даты
Преобразование даты в строку
Часовые пояса
Точное совпадение маски форматирования
Ослабление требований к точности совпадения
Интерпретация года из двух цифр
Преобразование часовых поясов в символьные строки
Дополнение вывода с модификатором FM
Литералы типа DATE и TIMESTAMP
Преобразования интервалов
Преобразование чисел в интервалы
Преобразование строк в интервалы
Форматирование интервалов для вывода
Литералы типа INTERVAL
CAST и EXTRACT
Функция CAST
Функция EXTRACT
Арифметические операции над значениями даты/времени
Операции с типами TIMESTAMP и INTERVAL
Операции с типом DATE
Вычисление интервала между двумя значениями DATE
Смешанное использование DATE и TIMESTAMP
Сложение и вычитание интервалов
Умножение и деление интервалов
Типы данных INTERVAL без ограничений
Функции для работы с датой/временем Записи
Записи в PL/SQL
Преимущества использования записей
Объявление записей
Записи, определяемые программистом
Обработка записей
Сравнение записей
Триггерные псевдозаписи Коллекции
Знакомство с коллекциями
Концепции и терминология
Разновидности коллекций
Примеры коллекций
Использование коллекций
Выбор типа коллекции
Встроенные методы коллекций
Метод COUNT
Метод DELETE
Метод EXISTS
Метод EXTEND
Методы FIRST и LAST
Метод LIMIT
Методы PRIOR и NEXT
Метод TRIM
Работа с коллекциями
Объявление типов коллекций
Заполнение коллекций данными
Обращение к данным в коллекциях
Коллекции со строковыми индексами
Коллекции составных типов данных
Многоуровневые коллекции
Работа с коллекциями в SQL
Операции мультимножеств с вложенными таблицами
Проверка равенства и принадлежности вложенных таблиц
Проверка принадлежности элемента вложенной таблице
Высокоуровневые операции с множествами
Обработка дубликатов во вложенной таблице
Управление коллекциями уровня схемы
Необходимые привилегии
Коллекции и словарь данных Другие типы данных
Тип данных BOOLEAN
Тип данных RAW
Типы данных UROWID и ROWID
Получение идентификаторов строк
Использование идентификаторов строк
Большие объекты данных
Работа с большими объектами
Понятие локатора LOB
Большие объекты — пустые и равные NULL
Запись данных в объекты LOB
Чтение данных из объектов LOB
Особенности типа BFILE
SecureFiles и BasicFiles
Временные объекты LOB
Встроенные операции LOB
Функции преобразования объектов LOB
Предопределенные объектные типы
Тип XMLType
Типы данных URI
Типы данных Any SQL и PL/SQL
DML и управление транзакциями
DML в PL/SQL
Краткое введение в DML
Секция RETURNING в командах DML
DML и обработка исключений
DML и записи
Управление транзакциями
Команда COMMIT
Команда ROLLBACK
Команда SAVEPOINT
Команда SET TRANSACTION
Команда LOCK TABLE
Автономные транзакции
Определение автономной транзакции
Правила и ограничения на использование автономных транзакций
Область видимости транзакций
В каких случаях следует применять автономные транзакции
Создание механизма автономного протоколирования Выборка данных
Основные принципы работы с курсорами
Терминология
Типичные операции с запросами и курсорами
Знакомство с атрибутами курсоров
Ссылки на переменные PL/SQL в курсорах
Выбор между явным и неявным курсорами
Работа с неявными курсорами
Примеры неявных курсоров
Обработка ошибок при использовании неявных курсоров
Атрибуты неявных курсоров
Работа с явными курсорами
Объявление явного курсора
Открытие явного курсора
Выборка данных из явного курсора
Псевдонимы столбцов явного курсора
Закрытие явного курсора
Атрибуты явных курсоров
Параметры курсора
Команда SELECT...FOR UPDATE
Снятие блокировок командой COMMIT
Предложение WHERE CURRENT OF
Курсорные переменные и REF CURSOR
Когда используются курсорные переменные
Сходство со статическими курсорами
Объявление типов REF CURSOR
Объявление курсорной переменной
Открытие курсорной переменной
Выборка данных из курсорной переменной
Правила использования курсорных переменных
Передача курсорных переменных в аргументах
Ограничения на использование курсорных переменных
Курсорные выражения
Использование курсорных выражений
Ограничения, связанные с курсорными выражениями Динамический SQL и динамический PL/SQL
Команды NDS
Команда EXECUTE IMMEDIATE
Команда OPEN FOR
О четырех категориях динамического SQL
Передача параметров
Режимы передачи параметров
Дублирование формальных параметров
Передача значений NULL
Работа с объектами и коллекциями
Динамический PL/SQL
Построение динамических блоков PL/SQL
Замена повторяющегося кода динамическими блоками
Рекомендации для NDS
Используйте права вызывающего для совместно используемых программ
Прогнозирование и обработка динамических ошибок
Параметры вместо конкатенации
Минимизация опасности внедрения кода
Когда следует использовать DBMS_SQL
Получение информации о столбцах запроса
Поддержка требований категории
Минимальный разбор динамических курсоров
Новые возможности Oracle11g
Усовершенствованная модель безопасности DBMS_SQL Создание приложений PL/SQL
Процедуры, функции и параметры
Модульный код
Процедуры
Вызов процедуры
Заголовок процедуры
Тело процедуры
Метка END
Команда RETURN
Функции
Структура функции
Возвращаемый тип
Метка END
Вызов функции
Функции без параметров
Заголовок функции
Тело функции
Команда RETURN
Параметры
Определение параметров
Формальные и фактические параметры
Режимы передачи параметров
Связывание формальных и фактических параметров в PL/SQL
Значения по умолчанию
Локальные модули
Преимущества локальных модулей
Область действия локальных модулей
Вложенные подпрограммы
Перегрузка подпрограмм
Преимущества перегрузки
Ограничения на использование перегрузки
Перегрузка числовых типов
Опережающие объявления
Дополнительные вопросы
Вызов пользовательских функций в SQL
Табличные функции
Детерминированные функции
Результаты неявных курсоров (Oracle Database 12c
Модульный подход — в жизнь Пакеты
Для чего нужны пакеты
Демонстрация возможностей пакетов
Основные концепции пакетов
Графическое представление приватности
Правила построения пакетов
Спецификация пакета
Тело пакета
Инициализация пакетов
Правила вызова элементов пакета
Работа с данными пакета
Глобальные данные в сеансе Oracle
Глобальные общедоступные данные
Пакетные курсоры
Повторно инициализируемые пакеты
Когда используются пакеты
Инкапсуляция доступа к данным
Исключение жесткого кодирования литералов
Устранение недостатков встроенных функций
Группировка логически связанных функций
Кэширование статических данных сеанса для ускорения работы приложения
Пакеты и объектные типы Триггеры
Триггеры уровня команд DML
Основные концепции триггеров
Создание триггера DML
Пример триггера DML
Однотипные триггеры
Очередность вызова триггеров
Ошибки при изменении таблицы
Составные триггеры
Триггеры уровня DDL
Создание триггера DDL
События триггеров
Атрибутные функции
Применение событий и атрибутов
Можно ли удалить неудаляемое
Триггер INSTEAD OF CREATE
Триггеры событий базы данных
Создание триггера события базы данных
Триггер STARTUP
Триггеры SHUTDOWN
Триггер LOGON
Триггеры LOGOFF
Триггеры SERVERERROR
Триггеры INSTEAD OF
Создание триггера INSTEAD OF
Триггер INSTEAD OF INSERT
Триггер INSTEAD OF UPDATE
Триггер INSTEAD OF DELETE
Заполнение таблиц
Триггеры INSTEAD OF для вложенных таблиц
Триггеры AFTER SUSPEND
Настройка для триггера AFTER SUSPEND
Код триггера
Функция ORA_SPACE_ERROR_INFO
Пакет DBMS_RESUMABLE
Многократное срабатывание
Исправлять или не исправлять
Сопровождение триггеров
Отключение, включение и удаление триггеров
Создание отключенных триггеров
Просмотр триггеров
Проверка работоспособности триггера Управление приложениями PL/SQL
Управление программным кодом в базе данных
Представления словаря данных
Вывод информации о хранимых объектах
Вывод и поиск исходного кода
Проверка ограничений размера
Получение свойств хранимого кода
Анализ и изменение состояний триггеров
Анализ аргументов
Анализ использования идентификаторов (Oracle Database 11g
Управление зависимостями и перекомпиляция
Анализ зависимостей с использованием представлений словаря данных
Детализация зависимостей (Oracle11g
Удаленные зависимости
Ограничения модели удаленных вызовов Oracle
Повышение производительности с использованием конвейерных табличных функций
Замена вставки на базе строк загрузкой на базе конвейерных функций
Конвейерные функции при оптимизации операций слияния
Параллельные конвейерные функции при асинхронной выгрузке данных
Влияние группировки и режима потоковой передачи в параллельных конвейерных
функциях
Конвейерные функции и затратный оптимизатор
Конвейерные функции при загрузке сложных данных
В завершение о конвейерных функциях
Специализированные приемы оптимизации
Метод передачи параметров NOCOPY
Выбор типа данных
Оптимизация вызовов функций в SQL (версия 12.1 и выше
Общие замечания о производительности Ввод/вывод в PL/SQL
Вывод информации
Включение DBMS_OUTPUT
Запись в буфер
Чтение содержимого буфера
Чтение и запись файлов
Параметр UTL_FILE_DIR
Работа с каталогами в Oracle
Открытие файлов
Проверка открытия файла
Закрытие файла
Чтение из файла
Запись в файл
Копирование файлов
Удаление файлов
Переименование и перемещение файлов
Получение атрибутов файла
Отправка электронной почты
Предварительная настройка
Настройка сетевой безопасности
Отправка короткого текстового сообщения
Включение «удобных» имен в адреса электронной почты
Отправка текстового сообщения произвольной длины
Отправка сообщения с коротким вложением
Отправка небольшого файла во вложении
Вложение файла произвольного размера
Работа с данными в Интернете (HTTP
Фрагментная загрузка страницы
Загрузка страницы в объект LOB
Аутентификация HTTP
Загрузка зашифрованной страницы (HTTPS
Передача данных методами GET и POST
Запрет и долгосрочное хранение cookie
Загрузка данных с сервера FTP
Использование прокси-сервера
Другие разновидности ввода/вывода в PL/SQL
Каналы, очереди и оповещения
Сокеты TCP
Встроенный веб-сервер Oracle Особые возможности PL/SQL
Безопасность и PL/SQL
Общие сведения о безопасности
Шифрование
Длина ключа
Алгоритмы
Заполнение и сцепление
Пакет DBMS_CRYPTO
Алгоритмы
Заполнение и сцепление
Шифрование данных
Шифрование LOB
SecureFiles
Дешифрование данных
Генерирование ключей
Управление ключами
Криптографическое хеширование
Коды MAC
Прозрачное шифрование данных
Прозрачное шифрование табличного пространства
Безопасность уровня строк
Зачем изучать RLS
Простой пример использования RLS
Статические и динамические политики
Контекстная политика
Использование столбцовой модели RLS
Отладка RLS
Контексты приложений
Использование контекстов приложений
Безопасность в контекстах
Контексты как предикаты в RLS
Идентификация сторонних пользователей
Детализированный аудит
Зачем изучать FGA
Простой пример
Количество столбцов
Просмотр журнала аудита
Подставляемые параметры
Модули-обработчики Архитектура PL/SQL
DIANA
Как Oracle выполняет код PL/SQL
Пример
Ограничения компилятора
Пакеты по умолчанию
Модели разрешений
Модель разрешений создателя
Модель разрешений вызывающего
Комбинированная модель разрешений
Назначение ролей программам PL/SQL (Oracle Database 12c
Функции «Кто меня вызвал?» (Oracle Database 12c
BEQUEATH CURRENT_USER для представлений (Oracle Database 12c
Ограничение привилегий в модели прав вызывающего (Oracle Database 12c
Условная компиляция
Примеры условной компиляции
Директива получения информации
Директива $IF
Директива $ERROR
Синхронизация кода с использованием пакетных констант
Применение директив получения информации для определения
конфигурации конкретных программ
Работа с обработанным кодом
PL/SQL и память экземпляров базы данных
SGA, PGA и UGA
Курсоры и память
Советы по экономии памяти
Что делать при нехватке памяти
Компиляция в низкоуровневый код
Когда используется режим интерпретации
Когда используется низкоуровневый режим
Низкоуровневая компиляция и версии Oracle
Что необходимо знать Глобализация и локализация в PL/SQL
Общие сведения и терминология
Знакомство с Юникодом
Типы данных и национальные наборы символов
Кодировка символов
Параметры Globalization Support (NLS
Функции Юникода
Символьная семантика
Порядок сортировки строк
Двоичная сортировка
Одноязычная сортировка
Многоязычная сортировка
Многоязыковой информационный поиск
Информационный поиск и PL/SQL
Дата и время
Типы данных временных меток
Форматирование даты и времени
Преобразования денежных величин
Globalization Development Kit для PL/SQL
Пакет UTL_118N
Пакет обработки ошибок UTL_LMS
Варианты реализации GDK Объектно-ориентированные возможности PL/SQL
История объектных возможностей Oracle
Пример объектного приложения
Создание базового типа
Создание подтипа
Методы
Вызов методов супертипа в Oracle11g
Запись, выборка и использование объектов
Эволюция и создание типов
И снова указатели
Типы данных ANY
Сделай сам
Сравнение объектов
Объектные представления
Пример реляционной системы
Объектное представление с атрибутом-коллекцией
Объектные подпредставления
Объектное представление с обратным отношением
Триггеры INSTEAD OF
Различия между объектными представлениями и объектными таблицами
Сопровождение объектных типов и объектных представлений
Словарь данных
Привилегии
О целесообразности применения объектно-ориентированного подхода Вызов Java-программ из PL/SQL
Oracle и Java
Подготовка к использованию Java в Oracle
Установка Java
Построение и компиляция кода Java
Назначение разрешений для разработки и выполнения Java-кода
Простая демонстрация
Поиск функциональности Java
Построение класса Java
Компиляция и загрузка в Oracle
Построение обертки PL/SQL
Удаление файлов из PL/SQL
Использование loadjava
Программа dropjava
Управление Java в базе данных
Пространство имен Java в Oracle
Получение информации о загруженных элементах Java
Пакет DBMS_JAVA
LONGNAME: преобразование длинных имен Java
GET_, SET_ и RESET_COMPILER_OPTION: чтение и запись
параметров компилятора
SET_OUTPUT: включение вывода из Java
EXPORT_SOURCE, EXPORT_RESOURCE и EXPORT_CLASS:
экспортирование объектов схемы
Публикация и использование кода Java в PL/SQL
Спецификация вызова
Правила спецификаций вызовов
Отображение типов данных
Вызов метода Java в SQL
Обработка исключений в Java
Расширение функциональности файлового ввода/вывода
Другие примеры Внешние процедуры
Знакомство с внешними процедурами
Пример: вызов команды операционной системы
Архитектура внешних процедур
Конфигурация Oracle Net
Определение конфигурации слушателей
Характеристики безопасности
Настройка многопоточного режима
Создание библиотеки Oracle
Написание спецификации вызова
Общий синтаксис спецификации вызова
Снова об отображении параметров
Отображение параметров: полная картина
Секция PARAMETERS
Свойства PARAMETERS
Инициирование исключений из вызываемой программы C
Нестандартные агенты
Сопровождение внешних процедур
Удаление библиотек Словарь данных
Правила и предупреждения
Параметры функций и метасимволы регулярных выражений
Числовые форматы
Маска формата даты
Предисловие
Основные цели
Структура книги
О содержании
Какие темы не рассматриваются
Платформа и версия
О программном коде
Использование примеров кода
Благодарности
От издательства Программирование на PL/SQL
Введение в PL/SQL
Что такое PL/SQL
История PL/SQL
Истоки PL/SQL
Улучшение переносимости приложений
Улучшенная защита приложений и защита целостности транзакций
Скромное начало, постоянное усовершенствование
Итак, PL/SQL
Интеграция с SQL
Управляющие конструкции и логические условия
Обработка ошибок
О версиях
Новые возможности PL/SQL в Oracle Database 12c
Ресурсы для разработчиков PL/SQL
Книги о PL/SQL от O’Reilly
PL/SQL в Интернете
Несколько советов
Не торопитесь
Не бойтесь обращаться за помощью
Поощряйте творческий (и даже радикальный) подход к разработке Написание и запуск кода PL/SQL
Перемещение по базе данных
Создание и редактирование исходного кода
SQL*Plus
Запуск SQL*Plus
Выполнение SQL-инструкции
Запуск программы на языке PL/SQL
Запуск сценария
Что такое «текущий каталог
Другие задачи SQL*Plus
Обработка ошибок в SQL*Plus
Достоинства и недостатки SQL*Plus
Базовые операции PL/SQL
Создание хранимой программы
Выполнение хранимой программы
Вывод хранимых программ
Управление привилегиями и создание синонимов хранимых программ
Удаление хранимой программы
Сокрытие исходного кода хранимой программы
Средства разработки для PL/SQL
Вызов кода PL/SQL из других языков
C, с использованием прекомпилятора Oracle (Pro*C
Java, с использованием JDBC
Perl, с использованием Perl DBI и DBD::Oracle
PHP, с использованием расширений Oracle
PL/SQL Server Pages
Что же дальше Основы языка
Структура блока PL/SQL
Анонимные блоки
Именованные блоки
Вложенные блоки
Область действия
Уточнение ссылок на переменные и столбцы в командах SQL
Видимость
Набор символов PL/SQL
Идентификатор
Ключевые слова
Пропуски и ключевые слова
Литералы
NULL
Одинарные кавычки внутри строки
Числовые литералы
Логические (булевские) литералы
Точка с запятой как разделитель
Комментарии
Однострочные комментарии
Многострочные комментарии
Ключевое слово PRAGMA
Метки Структура программы PL/SQL
Условные команды и переходы
Команды IF
Комбинация IF-THEN
Конструкция IF-THEN-ELSE
Конструкция IF-THEN-ELSIF
Ловушки синтаксиса IF
Вложенные команды IF
Ускоренное вычисление
Команды и выражения CASE
Простые команды CASE
Поисковая команда CASE
Вложенные команды CASE
Выражения CASE
Команда GOTO
Команда NULL
Удобочитаемость кода
Использование NULL после метки Циклы
Основы циклов
Примеры разных циклов
Структура циклов PL/SQL
Простой цикл
Завершение простого цикла: EXIT и EXIT WHEN
Моделирование цикла REPEAT UNTIL
Бесконечный цикл
Цикл WHILE
Цикл FOR со счетчиком
Правила для циклов FOR с числовым счетчиком
Примеры циклов FOR с числовым счетчиком
Нетривиальные приращения
Цикл FOR c курсором
Примеры цикла FOR с курсором
Метки циклов
Команда CONTINUE
Полезные советы
Используйте понятные имена для счетчиков циклов
Корректно выходите из цикла
Получение информации о выполнении цикла FOR
Команда SQL как цикл Обработка исключений
Основные концепции и терминология обработки исключений
Определение исключений
Объявление именованных исключений
Связывание имени исключения с кодом ошибки
Именованные системные исключения
Область действия исключения
Инициирование исключений
Команда RAISE
Процедура RAISE_APPLICATION_ERROR
Обработка исключений
Встроенные функции ошибок
Объединение нескольких исключений в одном обработчике
Необработанные исключения
Передача необработанного исключения
Продолжение выполнения после исключений
Написание раздела WHEN OTHERS
Построение эффективной архитектуры управления ошибками
Определение стратегии управления ошибками
Стандартизация обработки разных типов исключений
Коды ошибок, связанные с конкретным приложением
Стандартизация обработки ошибок
Работа с «объектами» исключений
Создание стандартного шаблона для обобщенной обработки ошибок
Оптимальная организация обработки ошибок в PL/SQL Работа с данными в PL/SQL
Работа с данными в программах
Присваивание имен
Обзор типов данных PL/SQL
Символьные типы данных
Числовые типы данных
Дата, время и интервалы
Логические данные
Двоичные данные
Типы данных ROWID и UROWID
Тип данных REF CURSOR
Типы данных для поддержки интернет-технологий
Типы данных «Any
Пользовательские типы данных
Объявление данных в программе
Объявление переменной
Объявление константы
NOT NULL
Объявления с привязкой
Привязка к курсорам и таблицам
Преимущества объявлений с привязкой
Синхронизация со столбцами таблицы базы данных
Объявления с привязкой и ограничение NOT NULL
Подтипы данных, определяемые программистом
Преобразования типов данных
Неявное преобразование типов
Явное преобразование типов Строки
Строковые типы данных
Тип данных VARCHAR
Тип данных CHAR
Строковые подтипы
О работе со строками
Определение строковых констант
Непечатаемые символы
Конкатенация строк
Преобразование регистра
Традиционный поиск и замена
Дополнение
Усечение строк
Поиск и замена с использованием регулярных выражений
Работа с пустыми строками
Смешение значений CHAR и VARCHAR
Краткая сводка строковых функций Числа
Числовые типы данных
Тип NUMBER
Тип PLS_INTEGER
Тип BINARY_INTEGER
Тип SIMPLE_INTEGER
Типы BINARY_FLOAT и BINARY_DOUBLE
Типы SIMPLE_FLOAT и SIMPLE_DOUBLE
Числовые подтипы
Числовые преобразования
Функция TO_NUMBER
Функция TO_CHAR
Округление при преобразовании чисел в символьные строки
Функция CAST
Неявные преобразования
Числовые операторы
Числовые функции
Функции округления и усечения
Тригонометрические функции
Сводка числовых функций Дата и время
Типы данных даты и времени
Объявление переменных даты и времени
Выбор типа данных
Получение текущей даты и времени
Типы данных INTERVAL
Объявление интервальных переменных
Когда используются типы INTERVAL
Преобразование даты и времени
Преобразование строк в даты
Преобразование даты в строку
Часовые пояса
Точное совпадение маски форматирования
Ослабление требований к точности совпадения
Интерпретация года из двух цифр
Преобразование часовых поясов в символьные строки
Дополнение вывода с модификатором FM
Литералы типа DATE и TIMESTAMP
Преобразования интервалов
Преобразование чисел в интервалы
Преобразование строк в интервалы
Форматирование интервалов для вывода
Литералы типа INTERVAL
CAST и EXTRACT
Функция CAST
Функция EXTRACT
Арифметические операции над значениями даты/времени
Операции с типами TIMESTAMP и INTERVAL
Операции с типом DATE
Вычисление интервала между двумя значениями DATE
Смешанное использование DATE и TIMESTAMP
Сложение и вычитание интервалов
Умножение и деление интервалов
Типы данных INTERVAL без ограничений
Функции для работы с датой/временем Записи
Записи в PL/SQL
Преимущества использования записей
Объявление записей
Записи, определяемые программистом
Обработка записей
Сравнение записей
Триггерные псевдозаписи Коллекции
Знакомство с коллекциями
Концепции и терминология
Разновидности коллекций
Примеры коллекций
Использование коллекций
Выбор типа коллекции
Встроенные методы коллекций
Метод COUNT
Метод DELETE
Метод EXISTS
Метод EXTEND
Методы FIRST и LAST
Метод LIMIT
Методы PRIOR и NEXT
Метод TRIM
Работа с коллекциями
Объявление типов коллекций
Заполнение коллекций данными
Обращение к данным в коллекциях
Коллекции со строковыми индексами
Коллекции составных типов данных
Многоуровневые коллекции
Работа с коллекциями в SQL
Операции мультимножеств с вложенными таблицами
Проверка равенства и принадлежности вложенных таблиц
Проверка принадлежности элемента вложенной таблице
Высокоуровневые операции с множествами
Обработка дубликатов во вложенной таблице
Управление коллекциями уровня схемы
Необходимые привилегии
Коллекции и словарь данных Другие типы данных
Тип данных BOOLEAN
Тип данных RAW
Типы данных UROWID и ROWID
Получение идентификаторов строк
Использование идентификаторов строк
Большие объекты данных
Работа с большими объектами
Понятие локатора LOB
Большие объекты — пустые и равные NULL
Запись данных в объекты LOB
Чтение данных из объектов LOB
Особенности типа BFILE
SecureFiles и BasicFiles
Временные объекты LOB
Встроенные операции LOB
Функции преобразования объектов LOB
Предопределенные объектные типы
Тип XMLType
Типы данных URI
Типы данных Any SQL и PL/SQL
DML и управление транзакциями
DML в PL/SQL
Краткое введение в DML
Секция RETURNING в командах DML
DML и обработка исключений
DML и записи
Управление транзакциями
Команда COMMIT
Команда ROLLBACK
Команда SAVEPOINT
Команда SET TRANSACTION
Команда LOCK TABLE
Автономные транзакции
Определение автономной транзакции
Правила и ограничения на использование автономных транзакций
Область видимости транзакций
В каких случаях следует применять автономные транзакции
Создание механизма автономного протоколирования Выборка данных
Основные принципы работы с курсорами
Терминология
Типичные операции с запросами и курсорами
Знакомство с атрибутами курсоров
Ссылки на переменные PL/SQL в курсорах
Выбор между явным и неявным курсорами
Работа с неявными курсорами
Примеры неявных курсоров
Обработка ошибок при использовании неявных курсоров
Атрибуты неявных курсоров
Работа с явными курсорами
Объявление явного курсора
Открытие явного курсора
Выборка данных из явного курсора
Псевдонимы столбцов явного курсора
Закрытие явного курсора
Атрибуты явных курсоров
Параметры курсора
Команда SELECT...FOR UPDATE
Снятие блокировок командой COMMIT
Предложение WHERE CURRENT OF
Курсорные переменные и REF CURSOR
Когда используются курсорные переменные
Сходство со статическими курсорами
Объявление типов REF CURSOR
Объявление курсорной переменной
Открытие курсорной переменной
Выборка данных из курсорной переменной
Правила использования курсорных переменных
Передача курсорных переменных в аргументах
Ограничения на использование курсорных переменных
Курсорные выражения
Использование курсорных выражений
Ограничения, связанные с курсорными выражениями Динамический SQL и динамический PL/SQL
Команды NDS
Команда EXECUTE IMMEDIATE
Команда OPEN FOR
О четырех категориях динамического SQL
Передача параметров
Режимы передачи параметров
Дублирование формальных параметров
Передача значений NULL
Работа с объектами и коллекциями
Динамический PL/SQL
Построение динамических блоков PL/SQL
Замена повторяющегося кода динамическими блоками
Рекомендации для NDS
Используйте права вызывающего для совместно используемых программ
Прогнозирование и обработка динамических ошибок
Параметры вместо конкатенации
Минимизация опасности внедрения кода
Когда следует использовать DBMS_SQL
Получение информации о столбцах запроса
Поддержка требований категории
Минимальный разбор динамических курсоров
Новые возможности Oracle11g
Усовершенствованная модель безопасности DBMS_SQL Создание приложений PL/SQL
Процедуры, функции и параметры
Модульный код
Процедуры
Вызов процедуры
Заголовок процедуры
Тело процедуры
Метка END
Команда RETURN
Функции
Структура функции
Возвращаемый тип
Метка END
Вызов функции
Функции без параметров
Заголовок функции
Тело функции
Команда RETURN
Параметры
Определение параметров
Формальные и фактические параметры
Режимы передачи параметров
Связывание формальных и фактических параметров в PL/SQL
Значения по умолчанию
Локальные модули
Преимущества локальных модулей
Область действия локальных модулей
Вложенные подпрограммы
Перегрузка подпрограмм
Преимущества перегрузки
Ограничения на использование перегрузки
Перегрузка числовых типов
Опережающие объявления
Дополнительные вопросы
Вызов пользовательских функций в SQL
Табличные функции
Детерминированные функции
Результаты неявных курсоров (Oracle Database 12c
Модульный подход — в жизнь Пакеты
Для чего нужны пакеты
Демонстрация возможностей пакетов
Основные концепции пакетов
Графическое представление приватности
Правила построения пакетов
Спецификация пакета
Тело пакета
Инициализация пакетов
Правила вызова элементов пакета
Работа с данными пакета
Глобальные данные в сеансе Oracle
Глобальные общедоступные данные
Пакетные курсоры
Повторно инициализируемые пакеты
Когда используются пакеты
Инкапсуляция доступа к данным
Исключение жесткого кодирования литералов
Устранение недостатков встроенных функций
Группировка логически связанных функций
Кэширование статических данных сеанса для ускорения работы приложения
Пакеты и объектные типы Триггеры
Триггеры уровня команд DML
Основные концепции триггеров
Создание триггера DML
Пример триггера DML
Однотипные триггеры
Очередность вызова триггеров
Ошибки при изменении таблицы
Составные триггеры
Триггеры уровня DDL
Создание триггера DDL
События триггеров
Атрибутные функции
Применение событий и атрибутов
Можно ли удалить неудаляемое
Триггер INSTEAD OF CREATE
Триггеры событий базы данных
Создание триггера события базы данных
Триггер STARTUP
Триггеры SHUTDOWN
Триггер LOGON
Триггеры LOGOFF
Триггеры SERVERERROR
Триггеры INSTEAD OF
Создание триггера INSTEAD OF
Триггер INSTEAD OF INSERT
Триггер INSTEAD OF UPDATE
Триггер INSTEAD OF DELETE
Заполнение таблиц
Триггеры INSTEAD OF для вложенных таблиц
Триггеры AFTER SUSPEND
Настройка для триггера AFTER SUSPEND
Код триггера
Функция ORA_SPACE_ERROR_INFO
Пакет DBMS_RESUMABLE
Многократное срабатывание
Исправлять или не исправлять
Сопровождение триггеров
Отключение, включение и удаление триггеров
Создание отключенных триггеров
Просмотр триггеров
Проверка работоспособности триггера Управление приложениями PL/SQL
Управление программным кодом в базе данных
Представления словаря данных
Вывод информации о хранимых объектах
Вывод и поиск исходного кода
Проверка ограничений размера
Получение свойств хранимого кода
Анализ и изменение состояний триггеров
Анализ аргументов
Анализ использования идентификаторов (Oracle Database 11g
Управление зависимостями и перекомпиляция
Анализ зависимостей с использованием представлений словаря данных
Детализация зависимостей (Oracle11g
Удаленные зависимости
Ограничения модели удаленных вызовов Oracle
Повышение производительности с использованием конвейерных табличных функций
Замена вставки на базе строк загрузкой на базе конвейерных функций
Конвейерные функции при оптимизации операций слияния
Параллельные конвейерные функции при асинхронной выгрузке данных
Влияние группировки и режима потоковой передачи в параллельных конвейерных
функциях
Конвейерные функции и затратный оптимизатор
Конвейерные функции при загрузке сложных данных
В завершение о конвейерных функциях
Специализированные приемы оптимизации
Метод передачи параметров NOCOPY
Выбор типа данных
Оптимизация вызовов функций в SQL (версия 12.1 и выше
Общие замечания о производительности Ввод/вывод в PL/SQL
Вывод информации
Включение DBMS_OUTPUT
Запись в буфер
Чтение содержимого буфера
Чтение и запись файлов
Параметр UTL_FILE_DIR
Работа с каталогами в Oracle
Открытие файлов
Проверка открытия файла
Закрытие файла
Чтение из файла
Запись в файл
Копирование файлов
Удаление файлов
Переименование и перемещение файлов
Получение атрибутов файла
Отправка электронной почты
Предварительная настройка
Настройка сетевой безопасности
Отправка короткого текстового сообщения
Включение «удобных» имен в адреса электронной почты
Отправка текстового сообщения произвольной длины
Отправка сообщения с коротким вложением
Отправка небольшого файла во вложении
Вложение файла произвольного размера
Работа с данными в Интернете (HTTP
Фрагментная загрузка страницы
Загрузка страницы в объект LOB
Аутентификация HTTP
Загрузка зашифрованной страницы (HTTPS
Передача данных методами GET и POST
Запрет и долгосрочное хранение cookie
Загрузка данных с сервера FTP
Использование прокси-сервера
Другие разновидности ввода/вывода в PL/SQL
Каналы, очереди и оповещения
Сокеты TCP
Встроенный веб-сервер Oracle Особые возможности PL/SQL
Безопасность и PL/SQL
Общие сведения о безопасности
Шифрование
Длина ключа
Алгоритмы
Заполнение и сцепление
Пакет DBMS_CRYPTO
Алгоритмы
Заполнение и сцепление
Шифрование данных
Шифрование LOB
SecureFiles
Дешифрование данных
Генерирование ключей
Управление ключами
Криптографическое хеширование
Коды MAC
Прозрачное шифрование данных
Прозрачное шифрование табличного пространства
Безопасность уровня строк
Зачем изучать RLS
Простой пример использования RLS
Статические и динамические политики
Контекстная политика
Использование столбцовой модели RLS
Отладка RLS
Контексты приложений
Использование контекстов приложений
Безопасность в контекстах
Контексты как предикаты в RLS
Идентификация сторонних пользователей
Детализированный аудит
Зачем изучать FGA
Простой пример
Количество столбцов
Просмотр журнала аудита
Подставляемые параметры
Модули-обработчики Архитектура PL/SQL
DIANA
Как Oracle выполняет код PL/SQL
Пример
Ограничения компилятора
Пакеты по умолчанию
Модели разрешений
Модель разрешений создателя
Модель разрешений вызывающего
Комбинированная модель разрешений
Назначение ролей программам PL/SQL (Oracle Database 12c
Функции «Кто меня вызвал?» (Oracle Database 12c
BEQUEATH CURRENT_USER для представлений (Oracle Database 12c
Ограничение привилегий в модели прав вызывающего (Oracle Database 12c
Условная компиляция
Примеры условной компиляции
Директива получения информации
Директива $IF
Директива $ERROR
Синхронизация кода с использованием пакетных констант
Применение директив получения информации для определения
конфигурации конкретных программ
Работа с обработанным кодом
PL/SQL и память экземпляров базы данных
SGA, PGA и UGA
Курсоры и память
Советы по экономии памяти
Что делать при нехватке памяти
Компиляция в низкоуровневый код
Когда используется режим интерпретации
Когда используется низкоуровневый режим
Низкоуровневая компиляция и версии Oracle
Что необходимо знать Глобализация и локализация в PL/SQL
Общие сведения и терминология
Знакомство с Юникодом
Типы данных и национальные наборы символов
Кодировка символов
Параметры Globalization Support (NLS
Функции Юникода
Символьная семантика
Порядок сортировки строк
Двоичная сортировка
Одноязычная сортировка
Многоязычная сортировка
Многоязыковой информационный поиск
Информационный поиск и PL/SQL
Дата и время
Типы данных временных меток
Форматирование даты и времени
Преобразования денежных величин
Globalization Development Kit для PL/SQL
Пакет UTL_118N
Пакет обработки ошибок UTL_LMS
Варианты реализации GDK Объектно-ориентированные возможности PL/SQL
История объектных возможностей Oracle
Пример объектного приложения
Создание базового типа
Создание подтипа
Методы
Вызов методов супертипа в Oracle11g
Запись, выборка и использование объектов
Эволюция и создание типов
И снова указатели
Типы данных ANY
Сделай сам
Сравнение объектов
Объектные представления
Пример реляционной системы
Объектное представление с атрибутом-коллекцией
Объектные подпредставления
Объектное представление с обратным отношением
Триггеры INSTEAD OF
Различия между объектными представлениями и объектными таблицами
Сопровождение объектных типов и объектных представлений
Словарь данных
Привилегии
О целесообразности применения объектно-ориентированного подхода Вызов Java-программ из PL/SQL
Oracle и Java
Подготовка к использованию Java в Oracle
Установка Java
Построение и компиляция кода Java
Назначение разрешений для разработки и выполнения Java-кода
Простая демонстрация
Поиск функциональности Java
Построение класса Java
Компиляция и загрузка в Oracle
Построение обертки PL/SQL
Удаление файлов из PL/SQL
Использование loadjava
Программа dropjava
Управление Java в базе данных
Пространство имен Java в Oracle
Получение информации о загруженных элементах Java
Пакет DBMS_JAVA
LONGNAME: преобразование длинных имен Java
GET_, SET_ и RESET_COMPILER_OPTION: чтение и запись
параметров компилятора
SET_OUTPUT: включение вывода из Java
EXPORT_SOURCE, EXPORT_RESOURCE и EXPORT_CLASS:
экспортирование объектов схемы
Публикация и использование кода Java в PL/SQL
Спецификация вызова
Правила спецификаций вызовов
Отображение типов данных
Вызов метода Java в SQL
Обработка исключений в Java
Расширение функциональности файлового ввода/вывода
Другие примеры Внешние процедуры
Знакомство с внешними процедурами
Пример: вызов команды операционной системы
Архитектура внешних процедур
Конфигурация Oracle Net
Определение конфигурации слушателей
Характеристики безопасности
Настройка многопоточного режима
Создание библиотеки Oracle
Написание спецификации вызова
Общий синтаксис спецификации вызова
Снова об отображении параметров
Отображение параметров: полная картина
Секция PARAMETERS
Свойства PARAMETERS
Инициирование исключений из вызываемой программы C
Нестандартные агенты
Сопровождение внешних процедур
Удаление библиотек Словарь данных
Правила и предупреждения
Параметры функций и метасимволы регулярных выражений
Числовые форматы
Маска формата даты