Pytanie : Wyjątek i Wyrocznia błąd wiadomość

Cześć Facet,

Given pismo pismo:

ScriptName: InsRecOnMytable.sql
--------------------------------



DECLARE
ERR_MSG VARCHAR2 (4000);
SCRT_NAME VARCHAR2 (400): = "InsRecOnMytable.sql";


BEGIN

Wszywka w myschema.mytable (SCHEMAT, IMIĘ, KOMENTARZ, ORACLE_TYPE, FUNCTIONAL_TYPE, WŁAŚCICIEL, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME)
wartość ("myschema", "mytable", "próbka stół (1)", "STÓŁ", "BASIC", "PRODUCT", "PRODUCT", (0), "Sample (1)", null);

Wszywka w myschema.mytable (SCHEMAT, IMIĘ, KOMENTARZ, ORACLE_TYPE, FUNCTIONAL_TYPE, WŁAŚCICIEL, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME)
wartość ("myschema", "mytable", "próbka stół 2", "STÓŁ", "BASIC1", "PRODUCT1", "PRODUCT1", (1), "Sample 2", null);

popełniać;

GrabErr (SCRT_NAME, "Sukces ");

END JEŻELI;

EXCEPTION
GDY DUP_VAL_ON_INDEX WTEDY  -- rękojeść powielać rejestr error

wybrany w ERR_MSG od podwójny;

GrabErr (SCRT_NAME, ERR_MSG); -- procedura który brać the ERR_MSG jako parameter

GDY WTEDY  -- obchodzić się wszystkie inny errors

wybrany w ERR_MSG od podwójny;

GrabErr (SCRT_NAME, ERR_MSG); -- procedura który brać the ERR_MSG jako parameter

OBNIŻKA;
END;
/

I właśnie potrzeba sposób sprawnie lub using zmienna the faktyczny WYROCZNIA błąd wiadomość wynikać od duplikat rejestr wynikać i znacząco, the kreskowy liczba dokąd the błąd zdarzać się dla debugging purposes.

the pismo kreskowy być pomysł tylko. Odczucie uwalniać pismo być the najlepszy rozwiązanie przez PL/SQL.

Using Plik-dziennik pracować ale the pomysł tutaj być że the GrabErr procedura aktualizować niektóre kolumna na stołowy mówić SCRIPTINFO the szczegół dla stołowy pismo. Jeżeli tam  być sposób the Plik-dziennik i w tym samym czasie sprawnie cisza SCRIPTINFO stół, wtedy tak dużo better.


Something jak wtedy:
--------------------


SCRIPTINFO TABLE
----------------

ID IMIĘ EXEC_STATUS REMARKS
===========================================================================
1 InsRecOnMytable.sql NIE UDAĆ SIĘ
2 MyScriptInsert.sql ===========================================================================


Can robić jak robić zrobić?

Thanks w postęp,
jrmn

Odpowiedź : Wyjątek i Wyrocznia błąd wiadomość

Twój kod być TWÓJ, ale I polecać niektóre zmiana:

Tam  być żadny potrzeba to:
wybiórka w ERR_MSG od podwójny;
The błąd być w te zmienna: SQLCODE i SQLERRM, w ten sposób

WYJĄTEK
   GDY DUP_VAL_ON_INDEX WTEDY  -- rękojeść powielać rejestr błąd

       GrabErr (SCRT_NAME, SQLCODE||''||SQLERRM);
      OBNIŻKA;   -- I dodawać tam  ponieważ w procedura GrabErr tam  powinienem AUTONOMICZNY TRANSAKCJA

   GDY INNY WTEDY  -- obchodzić się wszystkie inny błąd
       
       GrabErr (SCRT_NAME, SQLCODE||''||SQLERRM);
   
       OBNIŻKA;
KOŃCÓWKA;

W the procedura GrabErr use AUTONOMICZNY TRANSAKCJA.
Ty móc także twój swój podaniowy błąd.
Tutaj być więcej o wyjątek:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/errors.htm#i7014

Jeżeli ty chcieć the linia dokąd błąd zdarzać się wtedy dodawać zmienna e.g n_debug:

OZNAJMIAĆ
SCRT_NAME VARCHAR2 (400): = "InsRecOnMytable.sql";
    n_debug PLS_INTEGER: =0;

ZACZYNAĆ
    n_debug: =1;
  Wszywka w myschema.mytable (SCHEMAT, IMIĘ, KOMENTARZ, ORACLE_TYPE, FUNCTIONAL_TYPE, WŁAŚCICIEL, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME)
     wartość ("myschema", "mytable", "próbka stół (1)", "STÓŁ", "BASIC", "PRODUKT", "PRODUKT", (0), "Pobierać próbki (1)", null);

    n_debug: =2;

  Wszywka w myschema.mytable (SCHEMAT, IMIĘ, KOMENTARZ, ORACLE_TYPE, FUNCTIONAL_TYPE, WŁAŚCICIEL, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME)
     wartość ("myschema", "mytable", "próbka stół 2", "STÓŁ", "BASIC1", "PRODUCT1", "PRODUCT1", (1), "Pobierać próbki 2", null);

    n_debug: =3;
  popełniać;

 
  GrabErr (n_debug, SCRT_NAME, "Sukces ");

KOŃCZYĆ JEŻELI;

WYJĄTEK
        GrabErr (n_debug, SCRT_NAME, SQLCODE||''||SQLERRM);
       OBNIŻKA;

   GDY INNY WTEDY  -- obchodzić się wszystkie inny błąd
       
       GrabErr (n_debug, SCRT_NAME, SQLCODE||''||SQLERRM);
   
       OBNIŻKA;
KOŃCÓWKA;

I robić ono ten sposób. Ty móc także procedura z wkład parametr SCRT_NAME i zamiast pismo ty móc the procedura.

I mieć nadzieję ty być troszkę pomoc dla ty.
Inne rozwiązania  
 
programming4us programming4us