Ваше Кодий ОДОБРЕНН, но я порекомендовал бы некоторые изменения: Не будет потребности делать это: выберите в 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 и вместо сценария вы можете использовать процедуру.
Я надеюсь это будет меньшяя помощь для вас.
|