PL/SQL-да хато содир бўлиш шарти мустасно дейилади.
Мустаснолар тизим томонидан ёки фойдаланувчи томонидан аниқланиши мумкин. Тизим томонидан аниқланган мустаснога мисол сифатида нолга бўлиш ва хотира тўлиб кетиши кабиларни келитирш мумкин. Баъзи умумий тизим томонидан аниқланган мустаснолар ZERO_DIVIDE ва STORAGE_ERROR каби олдиндан аниқланган номларга эга.
Сиз ҳам фойдаланувчи сифатида ихтиёрий PL/SQL блокида, қисмдастурда ёки пакетда мустаснони аниқлашингиз мумкин. Фойдаланувчи томонидан аниқланган мустасно албатта номга эга бўлиши лозим.
Хатолик юз бериши билан мустасно содир бўлади. Тизим томонидан аниқланган мустаснолар автоматик тарзда тизим ишлаши жараёнида содир бўлади. Фойдаланувчи томонидан аниқланган мустасноларни эса сунъий тарзда RAISE жумласи ёрдамида содир этмоқ зарур.
Содир бўлган мустасноларга ишлов бериш учун алоҳида мустасно ишлов берувчиси деб номланувчи дастурни ёзишингиз лозим. Ишлов берувчи ишга тушишиши билан, жорий блокнинг бажарилиши тўхтатилади. Ишлов берувчи ишини тугатгандан сўнг бошқарув навбатдаги блокка узатилади. Мисол:
DECLARE
pe_ratio NUMBER(3,1);
BEGIN
SELECT price / earnings INTO pe_ratio FROM stocks
WHERE symbol = 'XYZ'; /* нолга_бўлиш
хатолиги юз бериши мумкин */
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio);
COMMIT;
EXCEPTION -- мустасно ишлов берувчиси бошланиши
WHEN ZERO_DIVIDE THEN /* 'нолга бўлиш'
хатолигига ишлов беради */
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', NULL);
COMMIT;
...
WHEN OTHERS THEN /* бошқа барча хатоликларга
ишлов беради */
ROLLBACK;
END;--мустасно ишлов берувчиси ва блокнинг охири
Нолга бўлиш хатолигини қуйидагича тузатиш мумкин:
INSERT INTO stats (symbol, ratio)
SELECT symbol, DECODE(earnings, 0, NULL, price / earnings)
FROM stocks WHERE symbol = 'XYZ';
Мустасноларнинг ижобий томонлари
Хатоликларга ишлов бериш учун мустаснолардан фойдаланиш қатор ижобий томонларга эга. Агарда мустасно ишлов берувчисидан фойдаланмасангиз, ҳар галда хатолик юз беришини текширишингиз лозим бўлади:
BEGIN
SELECT ...
--'берилганлар топилмади' хатолик юз беришини текшириш
SELECT ...
-- 'берилганлар топилмади' хатолик юз беришини текшириш SELECT ...
-- 'берилганлар топилмади' хатолик юз беришини текшириш
Агар мустасно ишлов берувчисидан фойдалансангиз, ушбу код қисқаради:
BEGIN
SELECT ...
SELECT ...
SELECT ...
...
EXCEPTION
WHEN NO_DATA_FOUND THEN -- барча'берилганлар топилмади' хатоликларини ушлайди
Do'stlaringiz bilan baham: |