11 Şubat 2011 Cuma

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.

Hiç yorum yok:

Yorum Gönder