joomla templates Data Warehouse Türkiye

Fri09092011

Last update07:32:32 PM GMT

Back Kategoriler Oracle Dba Oracle Hatalarını Output’a yazdırmak ve Loglamak
Çarşamba, 19 Ocak 2011 11:36

Oracle Hatalarını Output’a yazdırmak ve Loglamak

Yazan&Gönderen  Ercan Yazgan
Bu Öğeyi Derecelendir
(1 Oy)

Oracle Hatalarını Output’a yazdırmak ve Loglamak

Merhaba arkadaşlar,

Bu makalede sık sık başımıza gelen bir konuya değineceğim. Oracle veritabanıyla çalışırken karşımıza cıkan ORA-… ile başlayan hatalar, yazdığımız prosedürün çalışmasını keser veya prosedürü dışarıdan bir arayüzden çağırıyorsak (.Net/JAVA/DELPHI v.s. ..) programın çakılmasına yol açar. Bu gibi durumlarda PLSQL bloklarımızın içinde, diğer dillerdeki Try-Catche mantığıyla çalışan “EXCEPTION” bloklarını yerleştireceğiz.

 

Oracle hatalarını yakalamak ve üzerinde işlem yapmak için (yazdırmak veya loglamak gibi…) “SQLERRM” parametresini kullanacağız. Basitçe aşağıdaki gibi bir örnekle açıklayalım :

DECLARE

V_STRING VARCHAR2(3);

BEGIN

V_STRING := 'ERCAN';

DBMS_OUTPUT.PUT_LINE(V_STRING);

END;

1

Görüldüğü gibi PLSQL bloğu çalışmadı ve hata verdi çünkü 3 karakterlik tanımladığımız varchar2 değişkene 5 karakterlik değer atadığımızdan dolayı ‘buffer too small’ hatasını aldık. Şimdi exception bloğu ekleyerek tekrar çalıştıralım :

DECLARE

V_STRING VARCHAR2(3);

BEGIN

V_STRING := 'ERCAN';

DBMS_OUTPUT.PUT_LINE(V_STRING);

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;

PL/SQL procedure successfully completed.

2

Görüldüğü gibi exception bloğu sayesinde prosedür çalışıyor ve hatayı ekrana yazıyor.

Gelelim  hatayı loglamaya..

Aşağıdaki gibi bir table oluşturuyoruz.

CREATE TABLE ORA_LOG_TABLE(

ORA_ERROR_CODE VARCHAR2(10),

ORA_ERROR_MESSAGE VARCHAR2(100),

ORA_USER VARCHAR2(12) DEFAULT USER,

CUR_DATE DATE DEFAULT CURRENT_DATE

);

Table created.

Şimdi bloğumuzu aşağıdaki şekilde düzenliyoruz :

DECLARE

V_STRING VARCHAR2(3);

V_HATA_KOD VARCHAR2(10);

V_HATA_MESAJ VARCHAR2(100);

BEGIN

V_STRING := 'ercan';

DBMS_OUTPUT.PUT_LINE(V_STRING);

EXCEPTION

WHEN OTHERS THEN

V_HATA_KOD := SUBSTR(SQLERRM,1,9);

V_HATA_MESAJ := SUBSTR(SQLERRM,11,LENGTH(SQLERRM));

INSERT INTO ORA_LOG_TABLE(ORA_ERROR_CODE, ORA_ERROR_MESSAGE)

VALUES(

V_HATA_KOD,

V_HATA_MESAJ

);

COMMIT;

END;

PL/SQL procedure successfully completed.

SELECT * FROM ORA_LOG_TABLE;

3

Evet arkadaşlar, böylelikle ORA hatasını program çakılmasına sebep olmadan, yakaladık ve log’lamış olduk. Faydalı olmasını umarak iyi çalışmalar diliyorum.


Son Düzenleme Pazartesi, 14 Şubat 2011 14:48
Ercan Yazgan

Ercan Yazgan

Oracle Technologies Specialist

1988 Yalova Doğumluyum, İlköğretimimi İstanbulda, Lise eğitimini ise memleketim olan Gümüşhane'de Anadolu Lisesinde tamamladım. Lisans eğitimimi ise Sakarya Üniversitesinde, hayalim olan bilgisayar mühendisliğinde tamamladım. Üniversitedeyken kariyer hedefimi database teknolojileri üzerine belirledim ve Oracle ile projeler geliştirdim. Her zaman yeniye ve yeniliğe olan ilgimden dolayı lisans projemde ODI ve OBIEE teknolojilerini kullanarak veri ambarı sistemlerine giriş yaptım. Şu an özel bir şirkette PLSQL developer olarak çalışmaktayım. İlgi alanlarım ve bildiğim teknolojiler; PLSQL, ODI, OBI, ETL Circle, Oracle Administration, RAC systems, Data Guard, ASM.

E-posta: Bu e-Posta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir

Login to post comments