Вопрос : Регулировать исключения и хватать сообщения ошибки Oракул

Hi ванты,

Given сценарий ниже:

ScriptName: InsRecOnMytable.sql
--------------------------------
ERR_MSG VARCHAR2



DECLARE (4000);
SCRT_NAME VARCHAR2 (400): = «InsRecOnMytable.sql»; вставка


BEGIN

в значения
myschema.mytable (СХИМЫ, ИМЕНИ, ПРИМЕЧАНИЯ, ORACLE_TYPE, FUNCTIONAL_TYPE, ПРЕДПРИНИМАТЕЛЯ, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME) (таблица 1 «myschema», «mytable», «образца», «ТАБЛИЦА», «БЕЙСИК», «PRODUCT», «PRODUCT», 0, «Sample 1», null); вставка

в значения
myschema.mytable (СХИМЫ, ИМЕНИ, ПРИМЕЧАНИЯ, ORACLE_TYPE, FUNCTIONAL_TYPE, ПРЕДПРИНИМАТЕЛЯ, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME) (таблица 2 «myschema», «mytable», «образца», «ТАБЛИЦА», «BASIC1», «PRODUCT1», «PRODUCT1», 1, «Sample 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 - консультации тренировки?
  •  
    programming4us programming4us