- •1.Традиционные файловые системы
- •1.1.Подход, используемый в файловых системах
- •2.Системы с базами данных
- •2.1.База данных
- •2.2.Система управления базами данных ─ субд
- •2.3.Разработка базы данных смена парадигмы
- •3.Преимущества и недостатки субд
- •4.Модели данных
- •4.1.Объектные модели данных
- •4.2.Модели данных на основе записей
- •4.2.1 Иерархическая модель данных
- •4.2.2 Сетевая модель данных
- •4.2.3 Реляционная модель данных
- •4.2.4 Свойства отношений
- •4.2.5 Реляционная целостность
- •Целостность сущностей
- •Ссылочная целостность
- •Корпоративные ограничения целостности.
- •5.Функции субд
- •6.Компоненты субд
- •7.Системные каталоги
- •8.Инструкции sql
- •8.1.Имена
- •8.2.Имена таблиц
- •8.3.Имена столбцов
- •8.4.Типы данных
- •8.5.Константы
- •9.Инструкция select
- •9.1.Предложение select
- •9.2.Предложение from
- •9.3.Результаты запроса на выборку
- •9.4.Простые запросы
- •9.5.Вычисляемые столбцы
- •9.6.Выборка всех столбцов
- •9.7.Повторяющиеся строки
- •9.8.Отбор строк (предложение where)
- •9.8.1 Сравнение
- •9.8.2 Проверка на принадлежность значений (оператор between and)
- •9.8.3 Проверка на членство в множестве (оператор in)
- •9.8.4 Проверка на соответствие шаблону (оператор like)
- •10.Запросы с объединением таблиц
- •10.1.Производительность при обработке многотабличных запросов
- •11.Статистические (агрегатные) функции
- •12.Запросы с группировкой (предложение group by)
- •12.1.Условие отбора групп (предложение having)
- •13.Подчиненные запросы (подзапросы)
- •13.1.Условия отбора в подчиненном запросе
- •13.1.1 Проверка на существование (предикат exists)
- •13.1.2 Многократное сравнение (предикаты any и all)
- •Предикат any
- •Предикат all
- •13.1.3 Уровни вложенности запросов
- •14.Представления
- •14.1.Создание представлений
- •14.2.Как субд работает с представлениями
- •14.3.Преимущества представлений
- •14.4.Недостатки представлений
- •14.5.Обновление представлений
- •14.6.Контроль над обновлением представлений (предложение with check option)
- •15.Добавление новых данных
- •15.1.Однострочная инструкция insert
- •15.2.Добавление значений null
- •15.3.Добавление всех столбцов
- •15.4.Многострочная инструкция insert
- •16.Удаление существующих данных
- •16.1.Удаление всех строк
- •16.2.Инструкция delete с подчиненным запросом
- •17.Обновление существующих данных
- •17.1.Обновление всех строк
- •17.2.Инструкции update с подчиненным запросом
- •18.Условия целостности данных
- •18.1.Обязательное наличие данных
- •18.2.Условия на значения
- •18.3.Целостность таблиц (сущностей)
- •18.4.Проблемы, связанные со ссылочной целостностью
- •18.5.Правила удаления и обновления
- •18.6.Каскадные удаления
- •18.7.Ссылочные циклы
- •19.Язык определения данных
- •19.1.Создание базы данных
- •19.2.Создание таблиц (инструкция create table)
- •19.2.1 Определения столбцов
- •19.2.2 Определение первичного и внешнего ключей
- •19.2.3 Условия уникальности и ограничения на значения столбцов
- •19.3.Удаление таблицы (инструкция drop table)
- •19.4.Изменение определения таблицы (инструкция alter table)
- •19.4.1 Добавление и удаление столбца
- •19.4.2 Изменение первичных и внешних ключей
- •20.Псевдонимы таблиц (инструкции create / drop synonym)
- •21.Индексы (инструкции create/drop index)
- •22.Транзакции
- •22.1.Инструкции commit и rollback
- •22.2.Модель транзакции в стандарте ansi/iso
- •22.3.Журнал транзакций
- •22.4.Транзакции и работа в многопользовательском режиме
- •22.4.1 Проблема пропавшего обновления
- •22.4.2 Проблема промежуточных данных
- •22.4.3 Проблема несогласованных данных
- •22.4.4 Проблема строк – призраков
- •22.5.Параллельные транзакции
- •22.6.Блокировка
- •22.6.1 Уровни блокировки
- •22.6.2 Жесткая и нежесткая блокировки
- •22.6.3 Тупиковые ситуации
- •22.6.4 Явная блокировка
- •23.Принципы защиты данных, применяемые в sql
- •23.1.Пользователи
- •23.1.1 Аутентификация пользователей
- •23.2.Защищаемые объекты
- •23.3.Привилегии
- •23.3.1 Работа с привилегиями при помощи ролей
- •23.3.2 Роли, определяемые пользователями
- •23.3.3 Разрешение и запрещение ролей
- •23.3.4 Предоставление привилегий (инструкция grant)
- •23.3.5 Передача привилегий (предложение with grant option)
- •23.3.6 Отмена привилегий (инструкция revoke)
- •Инструкция revoke и право предоставления привилегий
- •24.Программирование сервера баз данныхoracle посредством pl/sql
- •24.1.Блоки
- •24.2.Комментарии
- •24.3.Объявления
- •24.3.1 Переменные и константы
- •24.3.2 Подтипы, определяемые пользователями
- •24.3.3 Составные типы, определяемые пользователями
- •Вложенные таблицы
- •Изменяемые массивы
- •24.3.4 Атрибуты
- •24.3.5 Особые замечания относительно вложенных таблиц и изменяемых массивов
- •Инициализация вложенных таблиц и изменяемых массивов
- •Использование методов сборных конструкций со вложенными таблицами и с изменяемыми массивами
- •24.3.6 Курсоры, курсорные типы и курсорные переменные
- •Курсорные типы и переменные
- •24.4.Функциональные возможности программ
- •24.4.1 Управление выполнением программ
- •Условное управление
- •Итерационное управление
- •24.4.2 Взаимодействие с базами данных
- •Стандартный dml
- •Работа с курсорами
- •Работа с курсорными переменными
- •24.4.3 Обработка исключительных ситуаций
- •24.5.Типы программ pl/sql
- •24.5.1 Анонимные блоки
- •24.5.2 Хранимые процедуры и функции
- •Создание процедур
- •Создание функций
- •Вызов процедур и функций
- •Управление блоками в sql*Plus
- •24.5.3 Модули
- •Использование объектов модуля
- •24.5.4 Триггеры баз данных
- •24.6.Служебные модули oracle
- •24.6.1 Модуль dbms_output
- •24.6.2 Динамический sql
- •Модуль dbms_sql
- •Использование dbms_sql
- •24.6.3 Файловый ввод/вывод (модуль utl_file)
- •Безопасность
- •Безопасность базы данных
- •Безопасность операционной системы
- •Исключительные ситуации, устанавливаемые в utl_file
- •Открытие и закрытие файлов
- •Файловый вывод
- •Файловый ввод
- •24.6.4 Взаимодействие между соединениями (модуль dbms_pipe)
- •Посылка сообщений
- •Получение сообщений
- •Создание программных каналов и управление ими
- •Программные каналы
- •Общие и частные каналы
- •Привилегии и безопастность
- •Установление протокола связи
- •Форматирование сообщений
- •Адресация данных
- •25.Создание приложений баз данных средствами odbc
- •25.1.Архитектура odbc
- •25.2.Коды возврата
- •25.3.Основной алгоритм программ odbc
- •25.4.Функции инициализации и завершения
- •25.5.Выполнение операторов
- •25.5.1 Функции управления каталогом
- •25.5.2 Непосредственное выполнение
- •25.5.3 Подготавливаемое выполнение
- •Использование параметров при выполнении.
- •25.6.Выборка результатов.
- •25.6.1 Выборка информации о результирующем множестве
- •25.6.2 Базовые функции выборки данных
- •25.7. Подробный алгоритм использования odbc в прикладных программах
24.4.Функциональные возможности программ
Выше было дано общее представление о типах конструкций, которые можно объявить в блоке PL/SQL. Теперь посмотрим, какие функции можно выполнять в теле PL/SQL (и в разделе обработки исключительных ситуаций). Далее в общих чертах будут представлены некоторые основные функциональные возможности PL/SQL.
24.4.1 Управление выполнением программ
Для управления работой типичной процедурной программы применяются определенные логические схемы. В PL/SQL процессом выполнения программ можно управлять при помощи условной, итерационной и последовательной логики. Далее рассказано о различных операторах управления выполнением программ в PL/SQL.
Условное управление
Оператор IF–ELSIF–ELSE в программе PL/SQL вычисляет некоторое логическое условие и, когда это условие истинно (TRUE), выполняет один или несколько операторов. В примере псевдопрограммы, приведенной ниже, показано использование команды IF–ELSIF–ELSE.
if условие then
оператор 1;
оператор 2;
…
elsif (не elseif)
оператор 3;
оператор 4;
…
else
оператор 5;
оператор 6;
…
end if;
Итерационное управление
Для повторения выполнения группы операторов в PL/SQL-программах можно применять циклы. В примерах псевдопрограмм, приведенных ниже, продемонстрировано использование базовых циклов, циклов WHILE и FOR.
-- БАЗОВЫЙ ЦИКЛ (LOOP) С ИСПОЛЬЗОВАНИЕМ EXIT – WHEN
loop
оператор 1;
оператор 2;
exit when условие;
end loop;
-- ЦИКЛ WHILE
while условие loop
оператор 1;
оператор 2;
end loop;
-- ЦИКЛ FOR С ВЛОЖЕННЫМИ ЦИКЛОМ И МЕТКАМИ
« внешний_цикл » – метка или имя цикла
for x in у.. z loop
внешний_оператор1;
« внутренний_цикл »
loop
внутренний_оператор1;
внутренний_оператор2;
exit внешний_цикл when условие1;
exit внутренний_цикл when условие2;
end loop внутренний_цикл;
внешний_оператор2;
end loop внешний_цикл;
Для завершения каждого базового цикла необходимо использовать при его определении либо оператор EXIT WHEN, либо оператор EXIT; в противном случае цикл будет выполняться бесконечно. При определении цикла WHILE или FOR требуется описывать способ завершения этого цикла. В третьем примере показано, как организовывать вложение циклов, применять для именования циклов специальные метки и ссылаться на определенные циклы по имени в операторах EXIT и END LOOP.
24.4.2 Взаимодействие с базами данных
Основное назначение языка PL/SQL – создание программ для работы с базами данных. Программа PL/SQL может взаимодействовать с базами данных только посредством SQL. В последующих параграфах показано, как с помощью программ PL/SQL управлять информацией, содержащейся в базах данных, используя SQL – операторы DML, курсоры и динамический SQL. (Вопросы, связанные с динамическим SQL, будут рассматриваться отдельно при рассмотрении модуля-утилиты DBMS_SQL.)
Стандартный dml
Всё множество инструкций SQL условно разделяют на два подмножества: DML (Data Manipulation Language) и DDL (Data Definition Language). Подмножество DML включает в себя все инструкции по управлению данными в базе (SELECT, INSERT, DELETE, UPDATE). Подмножество DDL включает в себя все инструкции по созданию объектов баз данных (CREATE), таких как таблицы, представления, индексы, синонимы и др., а также инструкции, изменяющие определение таблиц (ALTER TABLE), управляющие привилегиями пользователей (GRANT) и удаляющие объекты баз данных (DROP).
Любой из SQL – операторов DML можно использовать в программах для модифицирования базы данных ORACLE. Например, в процедуре UPDATE_PART_UNITPRICE, описанной в начале этого раздела, для модификации записи в таблице PARTS применяется простой оператор UPDATE. Для внесения изменений в строки таблиц баз данных программы PL/SQL могут включать любые корректные операторы INSERT, UPDATE или DELETE.
В программах PL/SQL для задания переменной некоторого значения или набора значений часто применяются операторы присваивания. Для этого можно использовать команду SELECT INTO. Например:
declare
current_part parts %rowtype;
begin
select * into current_part
from parts
where id=6;
Если в результирующем множестве оператора SELECT INTO содержится более одной строки, ORACLE возвращает сообщение об ошибке. Для обработки запроса, возвращающего более одной строки, в программе необходимо использовать курсор.
