general_manjago: (Default)
[personal profile] general_manjago


Ох, как же я ненавижу ковыряться в коде на PL/SQL, в котором встречаются конструкции типа
exception when others then return null! Хрен там в чем разберешься, если что-то пошло не так!

А недавно я просто впал в экстаз - там у чувака была гениальная функция
function Func return varchar2
is
begin
-- здесь что-то делается
exception when others then null
end;

А потом чувак написал что-то вроде

-- блок кода 1
select id into a from ... where field1 = Func
-- блок кода 2
exception when others then null;

В селекте возник-таки exception no_data_found, "блок кода 2" не выполнился - но пока мы до этого доперли....


Оригинал на http://www.itcommunity.ru/blogs/temnenkov/archive/2008/06/18/9868.aspx

И эти люди запрещают мне…

Date: 2008-06-18 05:54 am (UTC)
shadow_vol: (Dreamчик)
From: [personal profile] shadow_vol
Ага, и после этого кто-то смеет меня упрекать, что я хронически не желаю писать функции, годные к использованию в sql-запросах (т.е. гасящие exception и возвращающие хоть какой-то результат).

Всё, теперь буду совершенно законно ссылаться на этот текст и всех требующих посылать писать собственные обёртки на собственные страх и риск.
From: [identity profile] general-manjago.livejournal.com
Хм, да я тебя вроде не упрекал, ибо давно считаю это плохой практикой? По мне уж пусть лучше иксипшен вывалится, или чувак сам пишет обертку, где будет нужные (но не OTHERS!, а типа NO_DATA_FOUND) иксипшены перехватывать.
При этом чувак уж пускай прикинет, как функция будет ся вести :-)

ЗЫ. А там же чуваг еще и во where функцию использовал - что являеццо отдельной пейсней!

Date: 2008-06-18 08:00 am (UTC)
petropavel: (Default)
From: [personal profile] petropavel
Понимаю праведный гнев :-)
я обычно (если лениво прикидывать, чё там не так может пойти)
пишу

exception
when others then
dbms_output.put_line(SQLERRM);
end;

Ага, попался!

Date: 2008-06-19 04:45 am (UTC)
From: [identity profile] general-manjago.livejournal.com
К сожалению, не все программы ловят и показывают результаты put_line.

Но вот скажи, как представитель племени, ловящих все exceptiopns - зачем вот ты это делаешь?
Ну возник неожиданный exception - почему бы его не передать вверх по стеку? Ведь легче будет разобраться, что пошло не так?

Re: Ага, попался!

Date: 2008-06-19 05:29 am (UTC)
petropavel: (Default)
From: [personal profile] petropavel
Ну, не то, чтоб племени...
По идее, я согласен, действительно, ловить надо только то, что сам сможешь вылечить :-) гы-гы...

Но вот эта моя привычка вполне согласуется с приложением, с которым я последние пару лет ковыряюсь (я не девелопер, скорее, что-то вроде поддержки).
Там в клиентской части есть хоткей, который включает лОвлю dbms_output, плюс к тому протоколирует, какие процедуры вызывались и сколько времени каждая работала. Разработчики молодцы, удобную вещь предусмотрели.

Хотя в этом месте непойманный эксепшен, как правило, тоже покажется :-)

Date: 2012-02-17 02:00 am (UTC)
From: [identity profile] librecer.livejournal.com
Хороший пост, но много лишнего.Image (http://zimnyayaobuv.ru/)Image (http://zimnyaya-obuv.ru/)

April 2017

S M T W T F S
      1
234567 8
9101112131415
16171819202122
23242526272829
30      

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 6th, 2025 08:39 am
Powered by Dreamwidth Studios