Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экзамен БД.docx
Скачиваний:
7
Добавлен:
20.04.2019
Размер:
240.87 Кб
Скачать

Операторы управления транзакциями

Существует три операторы, предназначенные для управления транзакциями:

  • COMMIT – явная фиксация транзакции;

  • ROLLBACK – явная отмена изменения в текущей транзакции;

  • SAVEPOINT – создание контрольной точки внутри транзакции (промежуточная фиксация транзакции с возможность отката к этой точке);

Пример выполнения DML операторов с фиксацией и откатом транзакций:

-- 1. транзакция начинается автоматически после

-- установки соединения с БД

INSERT INTO MANAGERS(Man_Id, Name, Procent)

VALUES(100, ‘Иванов М.А.’, 5);

-- 2. промежуточная фиксация транзакции

SAVEPOINT Insert1ok;

-- 3. выполнение очередной команды DML

UPDATE MANAGERS SET Procent=15 WHERE Man_Id=100;

-- 4. откат транзакции до контрольной точки Insert1ok

ROLLBACK TO Insert1ok;

-- 5. откорректированная команда DML

UPDATE MANAGERS SET Procent=16 WHERE Man_Id=100;

-- 6. фиксация транзакции и начало новой транзакции

COMMIT;

-- 7. очередная команда DML

DELETE FROM MANAGERS;

-- 8. отмена всех изменений в текущей транзакции

-- (возврат БД к состоянию до пункта 6)

ROLLBACK;

Журналы транзакций

Журналы транзакций – это специальные файлы операционной системы, в которые СУБД записывает все изменения или транзакции, произведенные в базе данных. Поскольку все транзакции полностью сохраняются в журналах повтора, при необходимости с помощью этих журналов сервер базы данных всегда способен восстановить свое состояние на заданный момент времени. Каждая база данных обязательно должна иметь как минимум два оперативных журнала транзакций.

Журналы транзакций работают по циклическому принципу. Пусть в некоторой базе данных есть два журнала: logA и logB. По мере того, как транзакции создают, удаляют и модифицируют информацию в базе данных, все изменения заносятся в logA. Когда logA оказывается целиком заполненным, происходит переключение журналов, и все вновь произведенные транзакции начинают записываться в logB. По заполнении lоgВ происходит новое переключение журналов, и транзакции опять сохраняются в lоgA.

  1. Язык pl/sql, его структура, основные операторы.

SQL- непроцедурный язык

PL/SQL – процедурные языковые расширения SQL

Для разработки приложений клиент/сервер c помощью PL/SQL можно улучшить производительность приложений и системы:

- вместо операторов SQL используются скомпилированные программы;

- значительно сокращается сетевой график между клиентом и сервером.

PL/SQL- это блочно-структурированный язык

DECLARE

… набор операторов - определение переменных, констант, новых

типов данных, курсоров и т.д.

BEGIN - начало основной программы

… набор операторов

BEGIN

… набор операторов - вложенный блок

END

EXCEPTION

… набор операторов - определяются драйверы для обработки

исключительных ситуаций в программе

END

  • Секция заголовка содержит спецификацию процедуры, функции, пакета или триггера. Включает в себя название блока, описание входных и выходных параметров.

  • Секция объявлений предназначена для объявления переменных, констант, курсоров, которые будут использоваться в выполняемой секции процедуры, функции или триггера. Расположена сразу после секции заголовка, если она есть, и перед выполняемой секцией.

  • Выполняемая секция (тело) содержит один или более операторов PL/SQL. Начинается со слова BEGIN и заканчивается словом EXCEPTION, если есть секция исключений, или словом END.

  • Секция исключений содержит обработчики исключительных ситуаций. Исключительной ситуацией называют такую ситуацию, когда дальнейшее выполнение выполняемой секции не имеет смысла.

В анонимных блоках и в триггерах для создания секции заголовка указывается ключевое слово DECLARE. Во всех остальных случаях ключевое слово DECLARE не используется.

Константы discont CONSTANT REAL := 0.1; -- константа

Типы данных

Тип Подтип

NUMBER DECIMAL, REAL,

(precision, scale) INTEGER, SMALLINT,

FLOAT, NUMERIC

CHAR (length)

VARCHAR2 (length)

DATE

BOOLEAN

RECORD - строка таблици, рассматриваемая как одно целое

TABLE - одномерный массив

Записи трактуются в языке PL/SQL Oracle8 как совокупность разнотипных компонентов, которые можно хранить в столбцах реляционных таблиц, передавать в качестве параметров и т.п.

TYPE AgendaItem IS RECORD ( subject VARCHAR2 (100), duration TimeInterval);

item_info AgendaItem;

Присваивание переменным значений базы данных

В зависимости от числа возвращаемых запросом строк используются два метода.

SELECT … INTO … - когда возвращается 1 строка

BEGIN

SELECT id, customerid, orderdate

INTO currentorder.id, currentorder.customerid, currentorder.orderdate

FROM orders

WHERE id=453;

Операторы условного перехода IF

  • IF-THEN. Форма условного оператора для проверки простых условий. Если условие верно (TRUE), то выполняются указанные операторы. Если условие не выполняется (FALSE), то управление передается на следующий оператор.

  • IF-THEN-ELSE. Эта форма аналогична предыдущей, но при невыполнении условия (FALSE) управление передается на операторы, указанные после ELSE.

  • IF-THEN-ELSIF. Этот формат является альтернативой использованию вложенных операторов IF-THEN-ELSE.

  • CASE

Простой. Связывает одну или несколько послед. операторов с соответствующим значением.

CASE выражение

WHEN результат1 THEN Операторы1

WHEN результат1 THEN Операторы1

ELSE ОператорыELSE

END CASE;

Поисковый. Выбирает для выполнения одну из послед. операторов в завис. от рез. вычисл. списка лог. усл.

CASE

WHEN выражение1 THEN Операторы1

WHEN выражение2 THEN Операторы2

ELSE ОператорыELSE

END CASE;

Операторы цикла

Циклы позволяют организовать многократное выполнение одного и того же участка программы до полного завершения обработки.

Простой цикл.

LOOP

EXIT WHEN условие_завершения;

Операторы_цикла;

END LOOP;

Цикл FOR.

FOR переменная_цикла IN | имя_курсора

LOOP

Операторы_цикла;

END LOOP;

Цикл WHILE.

WHILE условие_завершения

LOOP

Операторы_цикла;

END LOOP;

Обработка ошибок (блок EXCEPTION) PL/SQL имеет встроенные исключительные ситуации

no_data_found, too_many_rows, invalid_number, …

EXCEPTION

When no_data_found then

When too_many_rows then

END

Процедура RAISE_APPLICATION_ERROR (ERRNUM, ERRMES)

ERRNUM – пользователь задает номер ошибки от -20000 до -20999

id_not_positive exception;

pragma exception_init(id_not_positive, -20050);

If(id<=0)then raise id_not_positive;