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


Эълон қилиш қисмида мустасноларнинг содир этилиши



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

Эълон қилиш қисмида мустасноларнинг содир этилиши


Эълон қилиш қисмида мустаснолар фақат қиймат бериш жараёнида содир этилиши мумкин. Масалан қуйидаги эълон қилиш қисмида мустасно содир этилади, чунки credit_limit ўзгармас 999 катта бўлган сонни сақлаб билмайди:
DECLARE
credit_limit CONSTANT NUMBER(3) := 5000; -- мустасно содир этилади
BEGIN
...
EXCEPTION
WHEN OTHERS THEN – мустаснони ушлаб билмайди
...
END;

Жорий блокдаги ишлов берувчилар содир этилган мустаснони ушлаб билмайди, чунки эълон қилиш қисмида содир этилган мустаснолар ўша заҳотиёқ ташқи блокга тарқалади.


Ишлов берувчида содир этилган мустаснолар


Бир вақтда фақат битта мустасно актив бўлиши мумкин холос, шу сабали ишлов берувчининг ичида содир этилган мустасно ўша заҳотиёқ ташқи блокга тарқалади ва янги содир этилган мустасно учун ишлов берувчини излайди:
EXCEPTION
WHEN INVALID_NUMBER THEN
INSERT INTO ... -- DUP_VAL_ON_INDEX мустасно содир бўлиши мумкин
WHEN DUP_VAL_ON_INDEX THEN ... – мустаснони ушлаб билмайди
END;

Мустаснога ишлов берувчидан чиқиш ва унга кириш


GOTO жумласи ёрдамида мустаснога ишлов берувчи қисмига кириш мумкин эмас. statement cannot branch into an exception handler. GOTO жумласи ёрдамида ишлов берувчи қисмидан жорий блокга ўтиш ҳам мумкин эмас:
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
pe_ratio := 0;
GOTO my_label;-- жорий блокга нотўғри ўтиш END;


SQLCODE ва SQLERRM фойдаланиш


Мустаснога ишлов бериш қисмида SQLCODE ва SQLERRM функцияларидан қандай хатолик юз берганини ва у билан боғланган хатолик матнини топиш учун фойдаланиш мумкин. Ички хатоликлар учун SQLCODE функцияси Oracle хатолиги номерини қайтаради. Агар Oracle хатолиги no data found бўлса SQLCODE функцияси +100 ва бошқа барча ҳолларда манфий соннни қайтаради. SQLERRM функцияси эса мос хатолик хабарини қайтаради. The message begins with the Oracle error code.
Фойдаланувчи томонидан аниқланган мустаснолар учун SQLCODE функцияси +1 ва SQLERRM функцияси қуйидаги хабарни қайтаради:
User-Defined Exception

Агар мустасно номи EXCEPTION_INIT прагма орқали Oracle хатолиги номери билан боғланган бўлса, SQLCODE функцияси хатолик номерини қайтаради ва SQLERRM функцияси эса мос хатолик хабарини қайтаради. The maximum length of an Oracle хатолиги хабарининг максимал узунлиги error message is 512 белгидан иборат бўлиши мумкин. Агар мустасно содир бўлмаса, SQLCODE функцияси нол қиймат қайтаради ва SQLERRM функцияси


ORA-0000: normal, successful completion

хабарни қайтаради. Oracle барча хатоликлар хабарларини қуйидаги дастур ёрдамида кўриш мумкин


DECLARE
...
err_msg VARCHAR2(100);
BEGIN
/* Get all Oracle error messages. */
FOR err_num IN 1..9999 LOOP
err_msg := SQLERRM(-err_num);
INSERT INTO errors VALUES (err_msg);
END LOOP;
END;

SQLCODE ва SQLERRM функцияларини бевосита SQL жумлалрида ишлатиш мумкин эмас, балки уларни аввал локал ўзгарувчида олиб, сўнг ишлатиш мумкин:


DECLARE
err_num NUMBER;
err_msg VARCHAR2(100);
BEGIN
...
EXCEPTION
...
WHEN OTHERS THEN
err_num := SQLCODE;
err_msg := SUBSTR(SQLERRM, 1, 100);
INSERT INTO errors VALUES (err_num, err_msg);
END;



Download 0,95 Mb.

Do'stlaringiz bilan baham:
1   ...   37   38   39   40   41   42   43   44   ...   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