PL/SQL Trigger

Oracle PL/SQL ile veritabanı üzerinde yapılan ekleme, güncelleme ve silme gibi işlemler sırasında çalışan trigger veya tetikleyiciler hakkında bilgiler yer alıyor.

Trigger

Veritabanı üzerinde yapılan çeşitli işlemler sonrasında komut çalıştırmak için kullanılan yapıya trigger veya tetikleyiciler denir.

Tetikleyiciler PL/SQL içerisinde yer alan prosedürlerle aynı yapıya sahiptir.

Tetikleyicileri, prosedürlerden ayıran en önemli özellik tetikleyicilerin kendiliğinden çalıştırılmasıdır.

Trigger oluştururken kullanılacak anahtar kelimeler aşağıdaki gibidir.

CREATE [OR REPLACE ] TRIGGER TETIKLEYICI_ADI
{BEFORE | AFTER | INSTEAD OF }
{INSERT [OR] | UPDATE [OR] | DELETE}
[OF SUTUN_ADI]
ON TABLO_ADI
[REFERENCING OLD AS ESKI NEW AS YENI]
[FOR EACH ROW]
WHEN (KOŞUL)
DECLARE
   -- tanımlamalar
BEGIN
   -- komutlar
EXCEPTION
   -- hata-yönetimi
END;

Tetikleyiciler aşağıdaki durumlarda çalıştırılır.

DML işlemleri – INSERT, UPDATE, DELETE

DDL işlemleri – CREATE, ALTER, DROP

Veritabanı işlemleri – SERVERERROR, LOGON, LOGOFF, STARTUP ve SHUTDOWN

DML

Tetikleyiciler genellikle DML işlemlerinde işlemleri kayıt altına almak için kullanılır.

Aşağıdaki örnekte Urunler tablosuna kayıt eklendikten sonra (BEFORE) ekrana Yeni ürün eklendi. yazdıracaktır.

CREATE OR REPLACE trigger TRG_YENI_URUN
BEFORE INSERT ON URUNLER
BEGIN
    DBMS_OUTPUT.put_line('Yeni ürün eklendi.');
END;

BEGIN ve END bloğu içerisine ayrıca başka bir tabloya kayıt ekleme işlemi yapılarak işlem kayıt altına alınabilir.

CREATE OR REPLACE trigger TRG_YENI_URUN
BEFORE INSERT ON URUNLER
BEGIN
    INSERT INTO INTO islem(tablo_adi, islem, kullanici, tarih) VALUES('URUNLER', 'EKLEME', USER, SYSDATE);
END;

Oluşturulan tetikleyicileri çalıştırmak için Urunler tablosuna kayıt eklemek yeterli olacaktır.

Tetikleyiciyi devre dışı bırakmak için ALTER ve DISABLE anahtar kelimeleri kullanılır.

ALTER TRIGGER trigger_adi DISABLE;

Tetikleyiciyi etkinleştirmek için ALTER ve ENABLE anahtar kelimeleri kullanılır.

ALTER TRIGGER trigger_adi ENABLE;

Tetikleyicilerle ilgili bilgi almak için SYS.user_trıggers tablosu kullanılabilir.

SELECT trigger_name, status FROM SYS.user_trıggers;

Tetikleyici silmek için DROP anahtar kelimesi kullanılır.

DROP TRIGGER trigger_adi;

Kayıt ekleme işleminden sonra Trigger ile eklenen kayıt silinmesi gibi tutarsız işlemler yapılmamalıdır.

Kayıt ekleme işleminde sonra Trigger ile yine aynı tabloya kayıt ekleme işlemi yapılmamalıdır.

Gereğinden fazla trigger kullanımı veritabanı sunucusunu yoracaktır.

PL/SQL Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!