Ю тся следую щие вопросы : ■ Структура блоков я зы к а o racle p L /s q L


Download 0.9 Mb.
Pdf ko'rish
bet13/14
Sana07.03.2023
Hajmi0.9 Mb.
#1246661
1   ...   6   7   8   9   10   11   12   13   14
Bog'liq
Майкл Мак-Локлин - Oracle DB 11g. Программирование на языке PL-SQL - 2014 better 51-73

Область видимости транзакций
Задани е области ви ди м ости тр ан зак ц и й яв л яется п отоком в ы п ол н ен и я 
или п роцессом . Вы устанавли ваете сеанс, когда п р и со ед и н яетесь к базе 
данны х O racle l l g . Э тот сеанс п о зво л я ет вам о п р ед ел ять п ер ем ен н ы е ок­
руж ения, н ап р и м ер
SERVEROUTPUT, 
к о то р а я п ом о гает вам п еч атать и з п р о ­
грамм P L /S Q L . То, ч то вы делаете в теч ен и е сеанса видно только вам до 
тех п ор, п ока вы не заф и кси р уете результат. К огда вы его заф и к с и р о в а­
ли (com m it), другие сеансы могут увидеть сделан н ы е и зм ен ен и я.
В теч ен и е сеан са вы м ож ете запускать одну и ли н есколько програм м
на P L /S Q L . О н и вы п олн яю тся последовательно, и ли сериям и . П ер вая 
програм м а м ож ет и зм ен и ть дан н ы е и ли окруж ение до того, как в то р ая 
н ач н ет и сп ол н яться, и так далее. Э то справедли во потому, что ваш сеанс 
яв л яется главной тран зак ц и ей . П отен ц и ал ьн о все в ы ч и сл ен и я зави сят 
от предыдущ их вы ч и слен ий . Вы м ож ете заф и к си р о в ать результаты р а­
боты , сделав все и зм ен ен и я п остоян н ы м и , и ли о ткати ться назад, отм е­
нив работу, отказавш и сь п р о и зв о д и ть все и ли н ек о то р ы е и зм ен ен и я.
П р оц ед ура ко н тр о л я за сеансом осн ован а н а тр е х командах. С начала 
он и бы ли н азван ы язы ком уп равлен ия тр ан зак ц и ям и (tran sactio n co n tro l 
language, TCL). Н е к о то р ы е со в рем ен н ы е документы именую т их ком ан­
дами язы к а уп р авлен и я д ан ны м и (d ata co n tro l langu age (DCL) com m and s). 
В это й кн и ге тер м и н DCL и спользуется для ссы лки н а эти т р и команды. 
П роб л ем а со сто и т в том, ч тобы п оп р о б о в ать п р о ясн и ть эту группу ко­
манд и з язы к а TCL, р азр аб о тан н о го в Б еркли. В от эти команды:
■ К ом анда 
COMMIT 
(заф и к си р овать) - ф и кси ру ет все и зм ен ен и я, сде­
л ан н ы е в рам ках язы ка DML н ач и н ая с м ом ента стар та сеанса и ли с 
м ом ента п ослед н ей ком анды
ROLLBACK 
(откати ть).
■ К ом анда 
SAVEPOINT 
(точ ка со х ран ен и я) - р азд ел яет два п ери ода, т.е. 
тр ан зак ц и и , осущ ествляем ы е между двумя о тн о си тел ьн ы м и м ом ен­
там и врем ени .
■ К ом анда 
R0LBACK 
- о тм ен я ет все и зм ен ен и я, сделанны е с н астоящ е­
го в рем ен и до н ачала п ер и о д а и ли и м ен о ван н ой т о ч ки со хр ан ен и я 
SAVEPOINT
и ли с н астоящ его в рем ен и до н ачала сеанса SQ H Plus.


48
Глава 2
Э ти ком анды п озволяю т вам уп равлять тем , ч то п р ои сх о д и т во врем я 
ваш его сеан са и в п роц ессе в ы п о л н ен и я програм м . Н ачал о сеанса яв л я­
ется о д н о в рем ен н о началом п ер и о д а и н еяв н о зад ан н ой то ч к о й со х ран е­
н и я 
SAVEPOINT. 
А н алоги чн о этому, заверш ен и е сеан са яв л яется ок о н ч ан и ­
ем п ер и о д а и н еяв н о задан н ой ком андой 
COMMIT 
(заф и к си ро вать).
П о р я д о к уп равлен и я областью види м ости тр ан зак ц и и р азл и ч ается в 
двух случаях: п р и ед и н ой области види м ости тр ан зак ц и й (single 
transactions scope) и п р и н езави си м ы х областях види м ости тр ан зак ц и й
(m u ltip le tran sactio n s scope). Вы создаете н езави си м ы е области видим ос­
ти тр ан зак ц и й , когда ф ункция и ли процедура н азн ач ается как автон ом ­
н ая х ран и м ая п рограм м н ая единица.
Единая область видимости транзакций
В аж ной п роб л ем ой бизн ес-п роцессов яв л яется об есп еч ен и е г ар а н ти р о ­
ван ного в ы п о л н ен и я двух и ли более п оследовательны х ком анд язы к а ма­
н и п ул и рован и я дан ны м и DML. Суть заклю чается в том, ч то он и и ли все 
долж ны успеш но о траб отать, и ли все бы ть отвергнуты . Ч асти ч н о успеш ­
н ое вы п о л н ен и е не допускается. Я зы к уп равлен ия дан ны м и DCL п о зво ­
л яе т вам гар ан ти р о в ать упомянутое п о веден и е п ослед овательности ко­
манд в рам ках ед и н ой области ви ди м ости тр ан зак ц и й (single tran sactio ns 
scope).
В следующем п р и м ер е п оказан о п р и м ен ен и е ком анд DCL для одно­
в р ем ен н ого в ы п о л н ен и я и ли не в ы п о л н ен и я о п ер ато р а 
INSERT:
□ -- Найдено в transaction_scope.sql на сайте издателя 
BEGIN
-- Установим точку сохранения SAVEPOINT 
SAVEPOINT new_MEMBER 
--Первый оператор INSERT 
INSERT INTO MEMBER VALUES
(MEMBER_s1.nextval,1005,’D921-71998’,’4444-3333-3333-4444’,1006 
,2,SYSDATE,2, SYSDATE);
--Второй оператор INSERT
INSERT INTO contact VALUES
(contact_s1.nextval,MEMBER_s1.currval+1,1003
, ’ Bodwin’,’Jordan’,’’
,2,SYSDATE,2, SYSDATE);
— Печатаем сообщение об успешном выполнении и фиксируем записи. 
dbms_output.PUT_LINE(‘Оба оператора выполнены успешно’);
COMMIT;
EXCEPTION 
WHEN others THEN
— Откатиться к точке сохранения и напечатать сообщение о сгенерирован­
ном исключении
ROLLBACK ТО new_MEMBER 
dbms_output.PUT_LINE(SQLERRM);
END;
/


Основы PL/SQL
49
В торой о п ер ато р INSERT не м ож ет вы п ол н и ться п равильн о, потому 
что он не уд овлетворяет о гр ан и ч ен и ям внеш н его клю ча MEMBER_id в таб­
л и ц е MEMBER. Э то т сбой п р и в ы п о л н ен и и сген ер и ру ет ош ибку O racle и п е­
ред аст уп равлен ие в блок об р аб о тки ош ибок (ex cep tio n block). П ер во е, 
что сделает блок об р аб о тки ош ибок, откат к точке, указанной п ервы м
оп ер ато р о м SAVEPOINT, заданны м в ан он и м н о м п р ограм м н ом блоке.
Независимые области видимости транзакций
Н е к о то р ы е бизнес-процессы требую т, ч то бы п рограм м ы р аб отал и н еза­
висим о. Н езави си м ы е п р ограм м ы запускаю тся в об особленн ы х областях 
види м ости тр ан зак ц и й . Если вы запускаете автономную программную
единицу, он а в ы п ол н яется в другой области види м ости тран закц и й .
Вы м ож ете создать автономную програм м у с помощ ью и нструкц ии
п р ед ко м н и ля то р а AUT0N0M0US_TRANSACTI0N. И н струкци я п ред ко м п и лято р а 
яв л яется п ар ам етром PRAGMA и о п р ед ел яет сп ец и альн ы е п р ави л а ф ункци­
о н и р о в ан и я, н ап ри м ер, независимую область види м ости тр ан закц и й . 
Только следующие ти п ы п рограм м могут бы ть н азн ач ен ы как автон ом ­
н ы е п рограм м ы : 
- ~
■ А н он им н ы е блоки в ер хн его уровня (не влож ен ны е)
■ П од п рограм м ы - ф ункции и процедуры , локальн ы е, о б особ ленн ы е 
(standalone) и п акетн ы е
■ М етоды об ъек тн ого ти п а в SQL
■ Т ри ггеры базы данны х
Н ачальн ая область види м ости тр ан зак ц и й и звестн а как главная п р о ­
грамма. О н а вы зы вает автон ом н ы е подп рограм м ы , ко то р ы е затем п о­
рож даю т соб ствен н ы е области види м ости тр ан зак ц и й . С бой в главной 
п рограм м е п осле вы зова автон ом н ой п одп рограм м ы м ож ет о ткати ть 
только те и зм ен ен и я, ко то р ы е бы ли сделаны в главной области видим ос­
ти тран зак ц и й . А втон ом н ая область види м ости тр ан зак ц и й м ож ет кон с­
тати р о в ать успеш ное вы п о л н ен и е и ли сбой своих тр ан зак ц и й н езави си ­
мо от главной п рограм м ы . О днако главная п ро грам м а м ож ет г ен ер и р о ­
вать ошибку, если автон ом н ая тр ан зак ц и я п о ро ди л а ошибку.
В Главе 5 п ри вед ен п р и м ер такого ти п а п ар ал л ел ьн о й работы . П е р ­
ви ч н ы й о п ер ато р INSERT в ы п олн яется неуспеш но из-за раб о ты автон ом ­
ного тр и ггер а базы данны х. Когда соб ы ти е запускает авто н ом н ы й тр и г­
гер, он зап и сы вает попы тку в таблицу ош ибок, ф и кси р ует запись, а за­
тем п о рож д ает ошибку. И склю чен и е в тр и ггер е в осп р и н и м ается как 
сбой в и сходном о п ер ато р е INSERT.
П рограм м ы , использую щ ие н езави си м ы е области види м ости тр ан зак ­
ций, явл яю тся слож ны м и. Вы долж ны бы ть уверены , ч то преим ущ ества 
п еревеш и ваю т риск, п реж де чем и сп ользовать р еш ен и я с п ри м ен ен и ем
н езави си м ы х областей види м ости тран зак ц и й .



Download 0.9 Mb.

Do'stlaringiz bilan baham:
1   ...   6   7   8   9   10   11   12   13   14




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling