- •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 в прикладных программах
Исключительные ситуации, устанавливаемые в utl_file
Если при выполнении некоторой процедуры или функции модуля UTL_FILE возникает ошибка, устанавливается исключительная ситуация. Возможные исключительные ситуации приведены в таблице 7. Обратите внимание на то, что в их состав входят восемь определенных в модуле UTL_FILE и две стандартные исключительные ситуации (NO_DАТА_FOUND и VALUE_ERROR). Исключительные ситуации UTL_FILЕ можно распознать по имени или с помощью обработчика исключительной ситуации OTHERS. Стандартные исключительные ситуации определяются еще и по значениям, возвращаемым для них функцией SQLCODE.
Таблица 7 Исключительные ситуации, устанавливаемые в UTL_FILE
Исключительная ситуация |
Причина |
Источник |
|
1 |
2 |
3 |
|
INVALID_РАТH |
Имя каталога или имя файла неверно или недоступно |
FOPEN |
|
INVALID_MODE |
Для режима файла указана неверная строка символов |
FOPEN |
|
INVALID_FILE_HANDLE |
Описатель файла не указывает на открытый файл |
FCLOSE, GET_LINE, PUT, PUT_LINE, NEW_LINE, PUTF, FFLUSH |
|
|
|
|
|
|
Продолжение таблицы 7 |
||
1 |
2 |
3 |
|
INVALID_OPERATION |
Файл нельзя открыть так, как это было запрошено. Возможная причина – полномочия операционной системы. Устанавливается также при попытке записи в файл, открытого для чтения, или при попытке чтения файла, открытого для записи |
GET_LINE, PUT, PUT_LINE, NEW_LINE, PUTF, FFLUSH |
|
INVALID_MAXLINESIZE |
Указанный максимальный размер строки слишком велик или слишком мал. |
FOPEN |
|
READ_ERROR |
Ошибка операционной системы во время операции чтения
|
GET_LINE |
|
WRITE ERROR |
Ошибка операционной системы во время операции записи |
PUT, PUT_LINE, PUTF, NEW_LINE, FFLUSH, FCLOSE, FCLOSE_АLL |
|
INTERNAL_ERROR |
Неопределенная внутрисистемная ошибка |
Все функции |
|
NO_DATA_FOUND |
Во время чтения достигнут конец файла |
GET_LINE |
|
VALUE_ERROR |
Вводимая строка слишком велика для буфера, указанного в GET_LINE |
GET_LINE |
|
Открытие и закрытие файлов
Во всех операциях модуля UTL_FILE фигурирует понятие описателя файла. Описатель, или логический номер, файла (file handle) – это значение, которое используется в PL/SQL для идентификации файла, подобно идентификатору курсора в модуле DBMS_SQL. Все описатели файлов имеют тип UTL_FILE.FILE_TYPE, они возвращаются функцией FOPEN и передаются как параметры вида IN в другие подпрограммы UTL_FILE.
Функция FOPEN открывает файл на ввод или на вывод. В любой момент времени файл может быть открыт или только на ввод, или только на вывод. Описание FOPEN выглядит следующим образом:
function FOPEN (location in varchar2, filename in varchar2, open_mode in
varchar2);
return FILE_TYPE;
Каталог, путь к которому указывается, должен существовать на момент выполнения этой функции – FOPEN его не создает. Однако если установить режим OPEN_MODE как ‘w’, то существующий файл будет перезаписываться. Параметры и возвращаемое значение функции FOPEN описаны в следующей таблице:
Таблица 8 Параметры функции FOPEN
Параметр |
Тип |
Описание |
location |
varchar2 |
Путь к каталогу, в котором расположен файл. Если этот каталог не входит в число доступных, то устанавливается UTL_FILE.INVALID_PATH. |
filename |
varchar2 |
Имя открываемого файла. Если задан режим 'w', то существующий файл перезаписывается. |
open_mode |
varchar2 |
Используемый режим. Возможные значения: ‘r’ – чтение текста; ‘w’ – запись текста; ‘а’ – добавление текста. Этот параметр не чувствителен к регистру символов. Если установлен режим ‘а’, а файл не существует, то он создается в режиме ‘w’. |
Возвращаемое значение |
UTL_FILE.FILE_TYPE |
Описатель файла, используемый впоследствии в функциях. |
В Oracle8 и выше в модуль UTL_FILE введен дополнительный, переопределенный вариант функции FOPEN:
function FOPEN (location in varchar2, filename in varchar2, open_mode in
varchar2, max_linesize in binary_integer);
return FILE_TYPE;
Параметры LOCATION, FILENAME и OPEN_MODE ведут себя так же, как и в первом варианте FOPEN, а MAXLINESIZE используется для указания максимального размера строки файла. Диапазон значений: от 1 до 32767. Если это значение не указано, максимальный размер строки устанавливается равным 1024. Если MAXLINESIZE меньше 1 или больше 32767, устанавливается исключительная ситуация UTL_FILE.INVALID_MAXLINESIZE.
После окончания чтения из файла или записи в него этот файл должен быть закрыт с помощью процедуры FCLOSE. В результате освобождаются ресурсы, используемые модулем UTL_FILE для работы с файлом. Описание FCLOSE выглядит следующим образом:
procedure FCLOSE (file_handle in out FILE_TYPE);
Единственным параметром этой процедуры является описатель файла. Все изменения, которые должны быть записаны в файл, завершаются перед его закрытием. В случае ошибки записи устанавливается UTL_FILE.WRITE_ERROR. Если описатель не идентифицирует корректный открытый файл, то устанавливается UTL_FILE.INVALID_FILEHANDLE.
Зачастую, перед тем как производить операции чтения из файла или записи/перезаписи в файл полезно проверить, открыт ли этот файл. Для этих целей в модуле UTL_FILE предусмотрена функция IS_OPEN. Эта логическая функция возвращает TRUE, если указанный файл открыт, и FALSE, если не открыт. Описание функции IS_OPEN таково:
function IS OPEN (file_handle in FILE TYPE)
return boolean;
Даже в том случае, когда IS_OPEN возвращает TRUE, при работе с данным файлом могут происходить ошибки операционной системы.
Процедура FCLOSE_ALL модуля UTL_FILE закрывает все открытые файлы. Она предназначена для удаления ставшей ненужной информации, что особенно полезно в обработчиках исключительных ситуаций:
procedure FCLOSE_ALL;
Эта процедура не принимает никаких аргументов. Все ожидающие записи изменения сбрасываются на диск перед закрытием файлов. Поэтому в случае ошибки записи FCLOSE_ALL может устанавливать исключительную ситуацию UTL_FILE.WRITE_ERROR.
