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

Проверка команды rollback

1. Убедимся, что в таблицах ничего нет.

@show_ex

2. Запустим скрипт с тестовым набором.

@ins_ex

Скрипт выполнен без ошибок. Первая команда INSERT из скрипта открывает транзакцию.

3. Смотрим содержимое таблиц.

@show_ex

Данные тестового набора добавлены в таблицу.

Обращаю внимание. Сейчас транзакция открыта. Команды SELECT выводят информацию с учетом изменений, которые сделаны скриптом ins_ex.

4. Вводим команду.

rollback;

Команда выполнена.

Транзакция явно завершена. Изменения отменены, т.е. тестового набора в таблицах не должно быть.

5. Убедимся в том, что таблицы пустые.

@show_ex

Действительно пустые.

Команда ROLLBACK завершила транзакцию с откатом изменений. Видим, что всё вернулось в исходное состояние, тестового набора нет.

Команда COMMIT

Проверим команду явного завершения транзакции с фиксацией изменений. Команда COMMIT.

1. Таблицы пустые. Добавим тестовый набор.

@ins_ex

Транзакция началась.

2. Убедимся, что тестовый набор добавлен.

@show_ex

Данные добавлены. Транзакция открыта.

3. Вводим команду.

commit;

Команда выполнена.

Транзакция явно завершена. Изменения зафиксированы.

4.Смотрим…

@show_ex

…данные присутствуют. Изменения сохранены.

Неявное завершение транзакции

Проверим неявное завершение транзакции с отменой изменений.

1. Исходное состояние – тестовый набор в таблицах. Удалим его.

@del_ex

Скрипт выполнен без ошибок.

Транзакция началась – первая команда DELETE начинает транзакцию.

2. Убедимся, что данных нет.

@show_ex

Таблицы пусты.

Транзакция открыта. Команда SELECT внутри транзакции учитывает изменения предыдущих команд.

3. Разорвем сеанс. Закрываем программу SQL*Plus либо щелчком на кнопке "Закрыть окно", либо одновременно нажимаем комбинацию клавиш ALT и F4.

Разорвали сеанс - это не явное завершение транзакции с отменой изменений, т.е. неявный rollback;

4. Запускаем программу SQL*Plus и подключаемся к базе данных.

5. Смотрим содержимое таблиц.

@show_ex

Тестовый набор на месте. Другими словами, действие команд DELETE отменено, разрыв сеанса привел к завершению транзакции и откату изменений.

Выполнение команд с ошибками

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

1. Вносим изменения в файл ins_ex. Умышленно делаем ошибку, меняем местами номер и дату документа в команде добавления услуг упаковки, т.е. в середине последовательности команд.

Откроем файл в текстовом редакторе. Найдем команду и внесем изменения. Запишем команду в файл с другим именем, например, ins_ex1.sql.

edit ins_ex

insert into exsvc

( exsvc_c

, doc_nd

, doc_dd

, service_n

, tax)

values

( seq_exsvc.NEXTVAL

, '12-sep-2003'

, 137

, 'услуги упаковки'

, 18)

2. Почистим таблицы.

@del_ex

Транзакция началась.

3. Продолжаем транзакцию. Выполним скрипт, который содержит ошибку.

@ins_ex1

Одна из команд выполнена с ошибкой.

Обращаю внимание. При возникновении ошибки выполнение скрипта продолжилась. Команды после сбоя отработали без ошибок. Смотрите сообщения.

4. Завершаем транзакцию.

commit;

5. Смотрим результат.

@show_ex

Данные в таблицах есть, но это не тестовый набор. Другими словами, сбой всего в одной команде привел к некорректному добавлению тестового набора.

Вывод: программист должен после каждой команды проверять код завершения и принимать решение о продолжении или завершении транзакции.

Ещё вывод: команды завершения транзакции только закрывают транзакцию. Они не проверяют коды выполнения команд, составляющих транзакцию.

И ещё: фиксируются изменения только тех команд, которые выполнились без ошибок. Изменения будут зафиксированы, даже если одна или несколько команд, входящих в транзакцию, выполнились с ошибками.

Памятка по работе с ORACLE

В скобках указан номер лекции.

Язык описания данных DDL

  • CREATE TABLE (2)

  • CREATE TABLE с NOT NULL и constraint (4)

  • DROP TABLE (2)

  • типы данных: number, varchar2, date (2)

  • значение NULL, колонка NOT NULL (4)

  • ALTER TABLE modify (4)

  • ALTER TABLE add column (4)

  • ALTER TABLE add constraint check (4)

  • ALTER TABLE add constraint primary key (4)

  • ALTER TABLE add constraint foreign key (4)

  • ALTER TABLE add constraint unique (4)

  • ALTER TABLE drop constraint (4)

  • CREATE SEQUENCE (4)

  • CREATE OR REPLACE PROCEDURE (6)

  • CREATE FUNCTION (6)

  • CREATE OR REPLACE PACKAGE (7)

  • CREATE PACKAGE BODY (7)

Язык управления данными DML

  • запись констант (3)

  • арифметические выражения (3)

  • значение NULL (3)

  • INSERT (3)

  • INSERT по SELECT (4)

  • DELETE (3)

  • UPDATE (3)

  • UPADTE нескольких колонок подзапросом SELECT (3)

  • SELECT * FROM (3)

  • SELECT <список колонок> FROM (3)

  • SELECT DISTINCT (4)

  • SELECT FROM (SELECT …) (3)

  • алиас колонки as (3)

  • алиас представления (3)

  • WHERE уcловия с LIKE (3)

  • WHERE с несколькими условиями, объединены AND (5)

  • ORDER BY (3)

  • стандартные функции ROUND, DECODE (3)

  • использование пользовательских функций в SELECT (6)

  • выражение CASE (3)

  • функция накопительного суммирование SUM (3)

  • псевдоколонки NEXTVAL, CURRVAL (4)

  • COMMIT (5)

  • ROLLBACK (5)

  • полезная таблица dual (4)