Основы (асослар)



Download 0,95 Mb.
bet42/58
Sana10.07.2022
Hajmi0,95 Mb.
#771988
1   ...   38   39   40   41   42   43   44   45   ...   58
Bog'liq
PL-SQL Маъруза матни (2)

Фойдали усуллар


Ушбу бўлимда қулайлик туғдирадиган учта усул билан танишасиз:

Мустасно содир этилгандан сўнг ишни давом этириш


Сизга маълумки мустасно содир этилгандан сўнг бошқарув мустаснога ишлов бериш қисмига узатилади ва ундан кейин блок иши тугатилади , яъни жорий блокга қайтишнинг иложи йўқ. Қуйидаги мисолда агарда SELECT INTO жумласида ZERO_DIVIDE содир бўлса, сиз INSERT жумласини ишлатолмайсиз:
DECLARE
pe_ratio NUMBER(3,1);
BEGIN
DELETE FROM stats WHERE symbol = 'XYZ';
SELECT price / NVL(earnings, 0) INTO pe_ratio FROM stocks
WHERE symbol = 'XYZ';
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio);
EXCEPTION
WHEN ZERO_DIVIDE THEN
...
END;

Ушбу мисолдаги муаммони қуйидагича ҳал қилиш мумкин::


DECLARE
pe_ratio NUMBER(3,1);
BEGIN
DELETE FROM stats WHERE symbol = 'XYZ';
BEGIN ---------- қисм-блок боши
SELECT price / NVL(earnings, 0) INTO pe_ratio FROM stocks
WHERE symbol = 'XYZ';
EXCEPTION
WHEN ZERO_DIVIDE THEN
pe_ratio := 0;
END; ---------- қисм-блок охири
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio);
EXCEPTION
WHEN OTHERS THEN
...
END;

Ушбу мисолда агар SELECT INTO жумласи ZERO_DIVIDE мустаснони содир этса, локал ишлов берувчи уни ушлаб олади ва pe_ratio нол қиймат беради. Ишлов берувчи ўз ишини тугатади ва иш INSERT жумласи билан давом этирилади.


Транзакцияни қайта бажариш


Агар мабода бирор сабабга кўра транзакциянгиз бажарилмай қолса, сиз уни қуйидаги мисолда кўрсатилган усулда қайта бажаришга уриниб кўришингиз мумкин:
DECLARE
name VARCHAR2(20);
ans1 VARCHAR2(3);
ans2 VARCHAR2(3);
ans3 VARCHAR2(3);
suffix NUMBER := 1;
BEGIN
...
LOOP /* буни ўрнига FOR i IN 1..10 LOOP бўлиши мумкин, унда ўнта уринишга имконият берилади */
BEGIN --қисм-блок боши
SAVEPOINT start_transaction; /* қайтиш
нуқтасини белгилаш */
DELETE FROM results WHERE answer1 = 'NO';
INSERT INTO results VALUES (name, ans1,
ans2, ans3);
/* DUP_VAL_ON_INDEX содир этиши
мумкин, агар номлар бир хил бўлса */
COMMIT;
EXIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
ROLLBACK TO start_transaction;
/* асл ҳолатга қайтиш*/
suffix := suffix + 1;
/*муаммони ҳал этишга уриниш*/
name := name || TO_CHAR(suffix);
END; -- қисм-блок охири
END LOOP;
END;

Download 0,95 Mb.

Do'stlaringiz bilan baham:
1   ...   38   39   40   41   42   43   44   45   ...   58




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish