Desktop
Website
Multimedia
Database
Security
Enterprise
Вопрос : Регулировать исключения и хватать сообщения ошибки Oракул
Hi ванты,
Given сценарий ниже:
ScriptName: InsRecOnMytable.sql
--------------------------
------
ERR_MSG VARCHAR2
DECLARE (4000);
SCRT_NAME VARCHAR2 (400): = «InsRecOnMytable.sql»; вставка
BEGIN
в значения
myschema.mytable (СХИМЫ, ИМЕНИ, ПРИМЕЧАНИЯ, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, ПРЕДПРИНИМАТЕЛЯ, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME) (таблица 1 «myschema», «mytable», «образца», «ТАБЛИЦА», «БЕЙСИК», «PRODUC
T», «PRODUC
T», 0, «Samp
le 1», null); вставка
в значения
myschema.mytable (СХИМЫ, ИМЕНИ, ПРИМЕЧАНИЯ, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, ПРЕДПРИНИМАТЕЛЯ, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME) (таблица 2 «myschema», «mytable», «образца», «ТАБЛИЦА», «BASIC1», «PRODU
CT1», «PROD
UCT1», 1, «S
ample 2», null);
поручает;
GrabErr
(SCRT_NAME, «успех ");
END ЕСЛИ;
EXCEPTION
КОГДА DUP_VAL_ON_INDEX ПОСЛЕ ЭТОГО -- показатели дубликата ручек
error
, котор выбирает msg
вставки в ERR_MSG от двойного;
GrabErr (SCRT_NAME, ERR_MSG); -- процедура принимает ERR_MSG как
parameter
КОГДА ДРУГИЕ ПОСЛЕ ЭТОГО -- регулирует все другие msg
errors
отборные привел к от двойной above> вставки в ERR_MSG от двойного;
GrabErr (SCRT_NAME, ERR_MSG); -- процедура принимает ERR_MSG как ROLLBACK
parameter
;
END; потребность
/
I как раз дорога мочь пройти или сохранить using перемеююый фактическое сообщение ошибки OРАКУЛ привела к от показателя дубликата выше и важно, линией номером где ошибка произошла для сценария доводка purposes.
the вышеуказанного будет идея только. Чувствуйте что свободно для того чтобы предложить будет самым лучшим разрешением через архив ЖУРНАЛА PL/SQL.
Using будет работать только идея здесь что процедура по GrabErr уточнит некоторые колонки на таблице говорит SCRIPTINFO содержа детали для каждого будучи исполнянной сценария. Если будет дорога создать архив ЖУРНАЛА и в тоже время быть способная тишина для уточнения таблицы SCRIPTINFO, то настолько много better.
что-нибудь подобное:
--------------------
SCRIPTINFO TABLE
----------------оракул
ID НАЗВАННЫЙ EXEC_STATUS REMARKS
==========================
==========
==========
==========
==========
=========
1 ВЫЛТИННЫЙ ИЗ СТРОЯ InsRecOnMytable.sql
2 MyScriptInsert.sql ОДОБРЕННОЕ Success
==========================
==========
==========
==========
==========
=========
Can, котор что-нибудь подобное было сделано?
Thanks заранее,
jrmn
class=
Ответ : Регулировать исключения и хватать сообщения ошибки Oракул
Ваше Кодий ОДОБРЕНН, но я порекомендовал бы некоторые изменения:
Не будет потребности делать это:
выберите
в ERR_MSG от двойного;
Ошибка находится в этих перемеююых: SQLCODE и SQLERRM, так
ИСКЛЮЧЕНИЕ
КОГДА DUP_VAL_ON_INDEX ПОСЛЕ ЭТОГО -- дубликат ручек записывает ошибку
GrabErr (SCRT_NAME, SQLCODE||''||SQLERRM);
ROLLBACK; -- Я добавлял это потому что в процедуре GrabErr ought быть АВТОНОМНО ТРУДЫЫ
КОГДА ДРУГИЕ ПОСЛЕ ЭТОГО -- регулирует все другие ошибки
GrabErr (SCRT_NAME, SQLCODE||''||SQLERRM);
ROLLBACK;
КОНЕЦ;
В ТРУДЫАХ пользы GrabErr процедуры АВТОНОМНО.
Вы можете также определить ваши собственные ошибки применения.
Здесь больше о обработке ошибок:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/errors.htm#i7014
Если вы хотите знать линию, то где ошибка происходит после этого добавьте n_debug перемеююого например:
ОБЪЯВИТЕ
SCRT_NAME VARCHAR2 (400): = «InsRecOnMytable.sql»;
n_debug PLS_INTEGER: =0;
НАЧНИТЕ
n_debug: =1;
Вставка в myschema.mytable (СХИМУ, ИМЯ, ПРИМЕЧАНИЕ, ORACLE_TYPE
, FUNCTIONAL_TYPE
, ПРЕДПРИНИМАТЕЛЯ, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
значения («myschema», «mytable», «таблица 1 образца», «ТАБЛИЦА», «БЕЙСИК», «ПРОДУКТ
», «ПРОДУКТ
», 0, «пробует
1», null);
n_debug: =2;
Вставка в myschema.mytable (СХИМУ, ИМЯ, ПРИМЕЧАНИЕ, ORACLE_TYPE
, FUNCTIONAL_TYPE
, ПРЕДПРИНИМАТЕЛЯ, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
значения («myschema», «mytable», «таблица 2 образца», «ТАБЛИЦА», «BASIC1», «PRODUCT1
», «PRODUCT1
», 1, «пробует
2», null);
n_debug: =3;
поручите;
GrabErr (n_debug, SCRT_NAME,
«успех ");
ЗАКОНЧИТЕСЬ ЕСЛИ;
ИСКЛЮЧЕНИЕ
GrabErr (n_debug, SCRT_NAME,
SQLCODE||''||SQLERRM);
ROLLBACK;
КОГДА ДРУГИЕ ПОСЛЕ ЭТОГО -- регулирует все другие ошибки
GrabErr (n_debug, SCRT_NAME,
SQLCODE||''||SQLERRM);
ROLLBACK;
КОНЕЦ;
Я делаю его эта дорога. Вы можете также создать процедуру с параметром входящего потока SCRT_NAME и вместо сценария вы можете использовать процедуру.
Я надеюсь это будет меньшяя помощь для вас.
Другие решения
Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
Шнур ошибки в блоке задвижки?
сколько вариант сервера SQL на одной машине
Внешний вид 2007 не может архивный файл открытой сети сохраненный
Активно директория DNS записывает вопрос
Отчет о доступа 2010 экспорта к CSV с коллекторами?
Прокладчик OCE 9400 не начинает
как добавить десятичное место в формуле в отчете о кристалла seagate
Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
VB6 к VS2010 - консультации тренировки?