Oracle Hatalarını Output’a yazdırmak ve Loglamak
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;
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.
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;
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.