Rastgele Yazılar : IBM'den çevre dostu veritabanı sistemi
Rastgele Yazılar : Database' in DBID ve DB_NAME Değerini Değiştirmek (dbne...
Rastgele Yazılar : LOG_MINER Kurulumu, Konfigurasyonu ve Kullanımı ...
Rastgele Yazılar : Neden ORM- Object Relatioanal Mapping- kullanayım ki?
Rastgele Yazılar : Oracle Recovery Manager (RMAN) - Recovery Catalog Datab...
Rastgele Yazılar : Nedir bu Data Warehouse?
Rastgele Yazılar : Sık Kullanılan Rman Komutları ile İlgili Temel Bilgiler...
Rastgele Yazılar : Datawarehouse Sistemlerine Genel Bakış
Rastgele Yazılar : Temporary Tablespace Alanı Hakkında
Rastgele Yazılar : Transportable Tablespace Yöntemi ile Taşınamayan Nesnel...
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 :
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
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 :
V_HATA_KOD VARCHAR2(10);
V_HATA_MESAJ VARCHAR2(100);
V_STRING := 'ercan';
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;
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.