Exception kelimesinin Türkçe karşılığı istisna demektir ve PL/SQL ‘de hataları yakalamak için kullanılan yapıya bu ad verilir. Exception blokları sayesinde kod içerisinde karşılaşılması öngörülen hatalar yakalanıp gerekli işlemler yapılabilir.

Eğer programımızda hata kontrolü yoksa programın çalışması durur ve programın kontrolü işletim sistemine döner. Hata kontrolü varsa da program hatalara rağmen devam edebilir.

Exception iki türlü tanımlanabilir :

  1. Sistem Tanımlı Exceptionlar(System Defined Exceptions)
  2. Kullanıcı Tanımlı Exceptionlar(User Defined Exceptions)

Kullanıcı Tanımlı Exceptionlar(User Defined Exceptions)

Bir uygulama yazıyorsunuz ve bu uygulamaya özel bazı hatalarınız oluşuyor ve bunları yakalamak ,ekrana bilgi vermek ya da loglamak istiyorsunuz. Bu gibi durumlarda PL/SQL sadece sistem tanımlı olan exceptionları değil kendi tanımladığınız hatalarınızı da yakalama şansı veriyor.

PL/SQL de hata tanımlaması yaparken aşağıdaki sintaksisi kullanıyoruz ;

DECLARE
   my-exception EXCEPTION;

Aşagıdaki örnekte bir exception tanımlıyoruz id’yi sıfır’ın altında girersek ex_invalid_id  exceptionu çalışacak.Başka bir hata durumunda ise tanımlı gelen exceptionlardan birisi çalışacak.

NOT :  Exception’ı hata olarak yakalaması için RAISE ifadesini kullandık. Raise’in karşılığı ‘uyandırmak’ olarak düşünülebilir ve burada ‘git ve oluşturduğum hatayı uyandır cevabını versin’ diyorsunuz

DECLARE
   v_id hr.employees.employee_id%type := &cc_id;
   v_name  hr.employees.first_name%type;
   v_surn hr.employees.last_name%type;

   -- exception tanimlariz
   ex_invalid_id  EXCEPTION;
BEGIN
   --exception sartini belirtiriz
   IF v_id <= 0 THEN
      RAISE ex_invalid_id;
   ELSE
      SELECT  first_name, last_name INTO  v_name, v_surn
      FROM hr.employees
      WHERE employee_id = v_id;

      DBMS_OUTPUT.PUT_LINE ('Name: '||  v_name);
      DBMS_OUTPUT.PUT_LINE ('Surname: ' || v_surn);
   END IF;
EXCEPTION
   --tanimladigimiz exception ise
   WHEN ex_invalid_id THEN
      dbms_output.put_line('ID must be greater than zero!');
   WHEN no_data_found THEN
      dbms_output.put_line('No such customer!');
   WHEN others THEN
      dbms_output.put_line('Error!');
END;
/

(continue reading…)

Loading