Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Ораклисты, help pls |
Философия, технологии, алгоритмы! |
|
Опции темы |
25.01.2012, 13:48 | #1 |
Бывалый форумец
Сообщений: 687
Регистрация: 05.08.2005
Не в сети |
Ораклисты, help pls
Пишу процедуру на PL/SQL Оракла.
пока в них не сильна, нужен совет в расстановке commit-rollback внутри процедуры: сейчас сделано примерно так (если писать человеческим языком): Код:
PROCEDURE какая-то (список параметров) IS BEGIN IF проверка_1_не_прошла THEN RETURN; END IF; IF проверка_2_не_прошла THEN RETURN; END IF; все_проверки_прошли_что-то_делаем_с записью_в_базу; commit; EXCEPTION -- отловить всякую бяку, которая не предусмотрена процедурой и предыдущими блоками begin-end WHEN OTHERS THEN -- тут_присвоить_коды_ошибок_выходным_переменным и т.п. an_err_code:=SQLCODE; as_err_text:=SQLERRM; rollback; END; BEGIN-EXCEPTION-END, которые обрабатывают только "нужные" исключения, а WHEN OTHERS оставляют самому внешнему блоку. вопрос: 1) правильно ли я поставила rollback в обработке самого внешнего Exception? Теоретически, мимо него не должна проскочить никакая нештатная сиуация - а все штатные exception-ы обрабатываются раньше, в проверках и блоках IF. 2) мне обязательно нужно возвращать коды ошибок Oracle, если хоть что-то произошло. Вот в этой ситуации коды ошибок присваиваются выходным переменным: Код:
-- тут_присвоить_коды_ошибок_выходным_переменным и т.п. an_err_code:=SQLCODE; as_err_text:=SQLERRM; rollback; и следовательно, если rollback идет первым - то увижу не реальную ошибку, из-за которой случился exception, а код завершения операции rollback? Код:
rollback; -- тут_присвоить_коды_ошибок_выходным_переменным и т.п. an_err_code:=SQLCODE; as_err_text:=SQLERRM; |
26.01.2012, 09:40 | #2 |
Бывалый форумец
Сообщений: 687
Регистрация: 05.08.2005
Не в сети |
Знаю, что плохо делать rollback-commit внутри процедуры. Но я крутила-крутила варианты, всё равно получается программный код так себе. Не лапша, но явно и не дзен.
Если не понравится, сделаю то же самое на уровне вызывающих. А исключения В ДАННОМ случае и не нужно передавать никуда наверх. Там пока что достаточно кодов ошибок. Это все - довольно тупая либа, которая работает по принципу "получилось - не получилось". Если она получит развитие, то буду смотреть дальше. В общем, я так понимаю - нехорошо, но не криминально? Если так, то пока оставлю этот вариант. Последний раз редактировалось J++; 26.01.2012 в 12:38. |
26.01.2012, 21:46 | #3 |
Форумец
Сообщений: 50
Регистрация: 19.11.2009
Возраст: 48
Не в сети |
|