PL/SQL Programlama -11 Trigger Kullanımı

Merhaba, bu yazıda Trigger konusuna bakacağız bir önceki yazıda fonksiyonları incelemiştik bu yazıya geçmeden önce incelemenizi tavsiye ederiz. https://ittutorial.org/pl-sql-programlama-10/

Trigger’ın türkçe karşılığı tetikleyci demektir veritabanında bir insert, update vb gibi bir işlem gerçekleştiğininde bunu algılayıp istediğimiz birşey gerçekleştirmeyi otomatize eder.

Trigger’ları şu işlemlerde kullanabiliriz;

  • INSERT-UPDATE-DELETE
  • ALTER-CREATE-DROP
  • LOGON-LOGOFF-STARTUP-SHUTDOWN
Trigger Oluşturma:

Bütün oluşturma işlemlerinde olduğu gibi trigger oluştururken de CREATE anahtar kelimesini kullanırız

CREATE [OR REPLACE] TRIGGER trigger_name

{BEFORE | AFTER | INSTEAD OF }

{INSERT [OR] | UPDATE [OR] | DELETE}

[OF colum_name]

ON table_name

[REFERENCING OLD AS o NEW AS n]

[FOR EACH ROW]

WHEN()

DECLARE

...............

BEGIN

.............

EXCEPTION

..................

END;

BEFORE | AFTER | INSTEAD OF KULLANIMI:

Trigger’ın hangi işlemler önce,sonra veya yerine çalışacağını belirtebileceğimiz opsiyonar da mevcuttur

  • BEFORE
  • AFTER
  • INSTEAD OF

BEFORE:

Herhangi bir tablo içerisinde değişiklil yapacağımız PL/SQL kodu çalışmadan önce BEFORE Trigger’ları çalışır ve burada bizim verdiğimiz kontrolleri yapar

Örnek olarak salı günü tabloya kayır girmeyi engelleyen bir trigger yazalım

CREATE OR REPLACE TRIGGER islem_kontrol
BEFORE INSERT ON calisanlar
BEGIN
IF (to_char(sysdate,'DY') in ('TUE')) then
raise_application_error(-20500,'Bu tabloya salı günü kayı girilemez!');
END IF;
END;
/

insert into calisanlar values('Kemal',27,20000);

Görüldüğü gibi trigger sağlıklı bir şekilde çalışmış.

AFTER:

BEFORE işleminin yaptığı kontrolleri PL/SQL kod bitiminde yaparak işlemleri devam ettirir.

Örnek olarak Employees tablosunda yapılan değişikliği log tablosuna kayıt edelim.

CREATE OR REPLACE TRIGGER maas_kontrol
AFTER UPDATE ON HR.EMPLOYEES
BEGIN
INSERT INTO log_emp values('Calisanın maası değişti',sysdate);
END;
/

update HR.employees SET salary=salary+1000 where employee_id=102;

select * from log_emp;

 

Yeni bir Trigger oluşturalım ve Employees tablosundaki değişiklikleri ekrana basalım.

CREATE OR REPLACE TRIGGER bolum_takip
BEFORE DELETE OR INSERT OR UPDATE ON HR.EMPLOYEES
FOR EACH ROW
WHEN(NEW.employee_id>0)
DECLARE
ebolum varchar2(20);
ybolum varchar2(20);
BEGIN
INSERT INTO log_emp(islem,tarih) values('Bölüm Değişti', SYSDATE);
DBMS_OUTPUT.PUT_LINE('Eski bölüm' || :NEW.department_id);
DBMS_OUTPUT.PUT_LINE('Yeni bölüm' || :OLD.department_id);
END;
/

update HR.EMPLOYEES set department_id=120 where employee_id=200;

Birkaç farklı kod bloğu var hemen onlara göz atalım

FOR EACH ROW:

Çalışankodun tablo üzerinde değişiklik yaptığı her satır için anlamındadır.

WHEN:

PL/SQLkodu içerisinde koşul belirttiğimiz alandır. FOR EACH ROW kullandığımızda ROW kullanırız.

OLD-NEW:

Kodun değiştirdiği verilerin referans noktalarıdı. Değişiklk önceki hali ve sonraki halini bunları sorgulayarak görüntüleyebiliriz.

 

Bu yazının da sonuna geldik bir sonraki yazıda Trigger’larda kaldığımız yerden devam edeceğiz,

Görüşmek üzere..

 

 

Deniz Parlak

I am a technical author on IT Tutorial. I am working on Oracle and Mysql databases, I also work on Datawarehouse and Big Data. If you need help, please contact deniz.parlak@yahoo.com.