Ю тся следую щие вопросы : ■ Структура блоков я зы к а o racle p L /s q L
Download 0.9 Mb. Pdf ko'rish
|
Майкл Мак-Локлин - 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. П рограм м ы , использую щ ие н езави си м ы е области види м ости тр ан зак ций, явл яю тся слож ны м и. Вы долж ны бы ть уверены , ч то преим ущ ества п еревеш и ваю т риск, п реж де чем и сп ользовать р еш ен и я с п ри м ен ен и ем н езави си м ы х областей види м ости тран зак ц и й . |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling