Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD.doc
Скачиваний:
9
Добавлен:
22.04.2019
Размер:
507.9 Кб
Скачать

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

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

  • 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, его структура, основные операторы.

PL/SQL – "Programming Language for SQL", или "Procedured SQL" – процедурный SQL. Это расширение стандартного языка SQL, предназначенное для создания более сложных бизнес-правил (ограничения, процедуры, функции и триггеры) на стороне сервера ORACLE. Их общая цель – реализация сложной бизнес-логики модульным способом (т.е. компонент за компонентом, причем одни компоненты многократно используются другими). Кроме того, размещение бизнесс-правил на сервере значительно повышает производительность системы за счет того, что в большинстве случаев СУБД не интерпретирует SQL-запросы, а выполняет заранее скомпилированные хранимые процедуры.

Блок PL/SQL состоит из четырех секций:

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

  • секция объявления (declaration section) - предназначена для объявления переменных, констант, курсоров, которые будут использоваться в выполняемой секции процедуры, функции или триггера.

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

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

Из всех секций обязательной является только одна - выполняемая секция. Простейший блок PL/SQL выглядит следующим образом:

DECLARE s varchar(50); BEGIN s:='Hello!'; dbms_output.put_line(s); END; /

Блоки могут быть вложены друг в друга. Последний, самый "верхний", блок PL/SQL называется базовым и всегда должен заканчивается символом "/", говорящий серверу о том, что можно приступать к компиляции введенной команды.

Блоки бывают:

  • именованные (имеют секцию заголовка),

  • анонимные (не имеют),

  • базовые,

  • вложенные (для объявления временных переменных и для обработки искл. ситуаций).

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

Арифметические операторы

+ - * / ** (степень)

Операторы сравнения

< > != ^= («не равно» все три оператора) > < =

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]