
- •9.Иерархические базы данных. Принципы построения, модель данных, области применения. Преимущества и недостатки.
- •10.Сетевые базы данных. Архитектура "клиент/сервер". Структура типового интерактивного приложения. Модель fs. Модель rda.
- •11.Модель сервера баз данных. Модель сервера приложений.
- •12.Реляционные базы данных. Принципы построения, модель данных, области применения. Преимущества и недостатки.
- •13.Реляционная система управления базами данных. Языки определения данных и языки манипулирования данными
- •14.Реляционная система управления базами данных. Процедурная (sql) форма реализации
- •15.Целостность бд. Понятие транзакций. Модели транзакций.
- •16.Назначение, состав, структура субд. Схема управления данными в субд. Процесс прохождения пользовательского запроса.
- •18.Основные понятия и конструкции pl/sql. Курсоры, хранимые процедуры, функции пользователя, триггеры.
18.Основные понятия и конструкции pl/sql. Курсоры, хранимые процедуры, функции пользователя, триггеры.
PL/SQL - это процедурный блочно-структурированный язык. Он представляет собой расширение языка SQL и предназначен для работы с СУБД Oracle. PL/SQL предоставляет разработчику приложений и интерактивному пользователю следующие основные возможности:
реализация подпрограмм как отдельных блоков, в том числе использование вложенных блоков;
создание пакетов, процедур и функций, хранимых в базе данных;
предоставление интерфейса для вызова внешних процедур;
поддержка как типов данных SQL, так и типов, вводимых в PL/SQL;
применение явного и неявного курсора, а также оператора цикла FOR для курсора;
введение у переменных PL/SQL и курсоров атрибутов, которые позволяют ссылаться на тип данных или структуру элемента;
введение типов коллекций и объектных типов;
поддержка набора операторов управления и операторов цикла;
реализация механизма обработки исключений.
Основной программной единицей PL/SQL является блок, который может содержать вложенные блоки, называемые иногда подблоками.
Блок позволяет объединять объявления и операторы, связанные общей логикой; может быть анонимным и именованным.
Блок состоит из трех основных частей:
секция объявлений (необязательная часть);
тело блока;
обработчики исключений (необязательная часть).
PL/SQL не чувствителен к регистру, кроме строковых переменных и констант. Каждая конструкция PL/SQL должна заканчиваться символом ;. Одна конструкция может быть расположена на нескольких строках.
Любой оператор языка PL/SQL, используемый для управления ходом выполнения программы, может относиться к одной из следующих групп операторов:
операторы выбора:
IF-THEN-END IF;
IF-THEN-ELSE-END IF;
IF-THEN-ELSIF-END IF;
операторы цикла:
LOOP-END LOOP;
WHILE-LOOP-END LOOP;
FOR-LOOP-END LOOP;
EXIT;
EXIT WHEN;
операторы безусловного перехода:
GOTO;
NULL;
Курсор SQL — это область памяти базы данных, где был сохранен последний из операторов SQL Если текущим оператором SQL оказывается запрос, в памяти сохраняется также и строка запроса – текущим значением курсора или текущей строкой Соответствующая область памяти именуется и оказывается доступной программам
DECLARE CURSOR ИМЯ_ КУРСОРА
IS {ОПЕРАТОР_SELECT}
При закрытии курсора в Oracle занимаемые им ресурсы освобождаются автоматически без использования оператора DEALLOCATE. Синтаксис оператора закрытия курсора в Oracle следующий. CLOSE ИМЯ_КУРСОРА
Сохраненная процедура — это набор операторов SQL, обычно называемый функцией или подпрограммой, созданный программистом для удобства использования в программах. Одни сохраненные процедуры могут вызывать другие, последние, в свою очередь, тоже могут вызывать сохраненные процедуры и т. д. Сохраненная функция является сохраненной процедурой, предполагающей в результате своего выполнения возврат некоторого значения. Функции вызываются процедурами. При вызове функции ей, как процедуре, могут передаваться параметры, затем функция вычисляет некоторое значение и возвращает его вызывающей процедуре для дальнейшего использования.
CREATE [ OR REPLACE ] PROCEDURE ИМЯ__ПРОЦЕДУРЫ [ (АРГУМЕНТ [{IN | OUT | IN OUT) ] ТИП, АРГУМЕНТ [{IN 1 OUT | IN OUT} ] ТИП] ] {IS I AS)
ТЕЛО_ПРОЦЕДУРЫ
Использовать сохраненные ранее процедуры удобнее, чем отдельные операторы SQL по целому ряду причин. Некоторые из этих причин перечислены ниже.
• Операторы сохраненной процедуры уже сохранены в базе данных.
• Операторы сохраненной процедуры уже проверены и находятся в готовом для использования виде.
• Возможность сохранения процедур позволяет использовать модульное программирование.
• Сохраненные процедуры могут вызывать другие процедуры и функции.
• Сохраненные процедуры могут вызываться другими программами.
• При использовании сохраненных процедур результат ответ от базы данных обычно получается быстрее.
• Использовать процедуры очень просто.
Триггер — это откомпилированная процедура, используемая для выполнения действий, инициируемых происходящими в базе данных событиями Триггер представляет собой сохраненную в базе данных процедуру, которая выполняется тогда, когда в отношении таблицы выполняются определенные действия (операторы языка манипуляции данными — DML). Триггер может выполняться до или после операторов INSERT, DELETE или UPDATE. Триггер можно создать с помощью оператора CREATE TRIGGER.
Тело триггера изменить нельзя Для этого триггер придется либо заменить другим, либо воссоздать В некоторых реализациях SQL триггер можно заменить (если триггер с данным именем в системе уже существует) с помощью того же оператора CREATE TRIGGER.
CREATE [ OR REPLACE ] TRIGGER ИМЯ_ТРИГГЕРА
[ BEFORE | AFTER]
<...>
Триггер можно удалить с помощью оператора DROP TRIGGER. Синтаксис этого оператора следующий.
DROP TRIGGER ИМЯ_ТРИГГЕPA.
/*ПРИЛОЖЕНИЕ*/
Для того, чтобы более определенно сформулировать цель, к которой разработчикам нужно стремится, Е.Кодд опубликовал 12 правил соответствия реляционной модели, которые опираются на основное правило:
Система, которая провозглашается поставщиком как реляционная СУБД, должна управлять базами данных исключительно способами, соответствующими реляционной модели.
Конкретные требования к реляционной СУБД раскрываются в следующих правилах:
Информационное правило. Вся информация, хранимая в базе данных, должна быть представлена единственным образом: в виде значений в реляционных таблицах.
Правило гарантированного логического доступа. К каждому имеющемуся в реляционной базе атомарному значению должен быть гарантирован доступ с помощью указания имени таблицы, значения первичного ключа и имени атрибута.
Правило наличия значения (missing information). В полностью реляционной СУБД должны иметься специальные индикаторы (отличные от пустой символьной строки или строки из одних пробелов и отличные от нуля или какого-то другого числового значения) для выражения (на логическом уровне, не зависимо от типа данных) того факта, что значение отсутствует по меньшей мере по двум различным причинам: его действительно нет, либо оно не применимо к данной позиции. СУБД должна не только отражать этот факт, но и распространять на такие индикаторы свои функции манипулирования данными не зависимо от типа данных.
Правило динамического диалогового реляционного каталога. Описание базы данных выглядит логически как обычные данные, так что авторизованные пользователи и прикладные программы могут употреблять для работы с этим описанием тот же реляционный язык, что и при работе с обычными данными.
Правило полноты языка работы с данными. Сколько бы много в СУБД ни поддерживалось языков и режимов работы с данными, должен иметься по крайней мере один язык, выразимый в виде командных строк в некотором удобном синтаксисе, который бы позволял формулировать:
определение данных
определение правил целостности
манипулирование данными (в диалоге и из программы)
определение таблиц-представлений (в том числе и возможности их модификации)
определение правил авторизации
границы транзакций
Правило модификации таблиц-представлений. В СУБД должен существовать корректный алгоритм, позволяющий автоматически для каждой таблицы-представления определять во время ее создания, может ли она использоваться для вставки и удаления строк и какие из столбцов допускают модификацию, и заносящий полученную таким образом информацию в системный каталог.
Правило множественности операций. Возможность оперирования базовыми таблицами или таблицами-представлениями распространяется полностью не только на выдачу информации из БД, но и на вставку, модификацию и удаление данных.
Правило физической независимости. Диалоговые операторы и прикладные программы на логическом уровне не должны страдать от каких-либо изменений во внутреннем хранении данных или методах доступа СУБД
Правило логической независимости. Диалоговые операторы и прикладные программы на логическом уровне не должны страдать от таких изменений в базовых таблицах, которые сохраняют информацию и теоретически допускают неизменность этих операторов и программ.
Правило сохранения целостности. Диалоговые операторы и прикладные программы не должны изменяться при изменении правил целостности в БД, задаваемых языком работы с данными и хранимых в системном каталоге.
Правило независимости от распределенности. Диалоговые операторы и прикладные программы на логическом уровне не должны зависеть от совершаемого физического разнесения данных (если первоначально СУБД работала с нераспределенными данными) или перераспределения (если СУБД распределенная).
Правило ненарушения реляционного языка. Если в реляционной СУБД имеется язык низкого уровня (для работы с отдельными строками), он не должен позволять нарушать или "обходить" правила, сформулированные на языке высокого уровня (множественном) и занесенные в системный каталог.