Salı , 5 Ağustos 2014
Son Haberler

Trigger

Trigger mantığı, çeşitleri, örnek

TRIGGER
Trigger; Eğer SQL DML(INSERT,UPDATE veya DELETE) şeklinde tanımlanmışsa  Database tarafından otomatik olarak çalıştırılan bir procedür olarak tanımlanabilir. Trigger lar Bir tablodaki değişikliklerle tetiklenirler.
Bir Trigger mantığı:
1.        1. Bir SQL ifadesi çalışmadan önce yada çalıştıktan sonra tetiklenir.
2.        2. Bir tabloda Trigger satır bazında çalışabilir. Böyle bir Trigger row-level trigger olarak adlandırılır.
3.        3. Bir trigger bütün satırlar için çalıştırılabilir.Böyle bir trigger’a da statement-level Trigger denir.
4.         4. Row-Level Trigger;  kolonda UPDATE ifadesinin sonucu olarak tetiklendiğinde   eski ve yeni kolon’a erişir.
5.         5. Bir Trigger’ın tetiklenmesi  Bir trigger şartının devreye girmesiyle olur.
Farklı Event’lar bir trigger’ı tetikler, Fakat bu Event’lar her zaman 3 gruba ayrılır:
1.         a) DML trigger’ları
2.         b) INSTEAD OF Trigger’ları
3.         c)System Event Trigger’ları
DML Trigger’ları; herhangi bir tabloda INSERT/UPDATE/DELETE  ifadeleri ile çalışır. Örnek:
CREATE TABLE isci_durum
(
   isim         VARCHAR2(30),
   tanim        VARCHAR2(30),
   olay_tarih   DATE
);
——–Table created.
CREATE TABLE isci_tazminat
(
   sirket       VARCHAR2 (100),
   isim        VARCHAR2(100),
   tazminat    NUMBER,
   cikarilma   NUMBER
);
——-Table created.
———–
————
CREATE OR REPLACE PROCEDURE isci_denetleme(isim IN VARCHAR2,
                                            tanim  IN VARCHAR2,
                                            olay_tarih IN DATE)
IS
    PRAGMA  AUTONOMOUS_TRANSACTION;
BEGIN
    INSERT  INTO isci_durum
        VALUES(
                  isci_denetleme.isim,
                  isci_denetleme.tanim,
                  isci_denetleme.olay_tarih);
   COMMIT;
END;
—————Procedure created.
————————–
————————–
CREATE OR REPLACE TRIGGER bef_ins_ceo_comp
   BEFORE INSERT
   ON isci_tazminat
   FOR EACH ROW
DECLARE
   ok BOOLEAN :=TRUE;
BEGIN
   IFok
   THEN
      isci_denetleme(:new.isim,’BEFORE INSERT’,SYSDATE);
    END IF;
END;
–Trigger created.
SELECT isim, tanim, TO_CHAR(olay_tarih,’MM/DD/YYYY HH:MI:SS’)olay_tarih
 FROM isci_durum;
–no rows selected
BEGIN
    INSERT  INTO isci_tazminat
        VALUES(‘M’,
                ’J',
                9100000,
                2700);
    INSERT  INTO isci_tazminat
        VALUES(‘A’,
                ’H',
                33200000,
                3300);
    INSERT   INTO isci_tazminat
        VALUES(‘E’,
                ’G',
                10700000,
                20100);
END;
————————————
–PL/SQL procedure successfully completed.
SELECT isim,tanim,TO_CHAR(olay_tarih,’MM/DD/YYYY HH:MI:SS’)  olay_tarih
  FROM  isci_durum;
–isim
——————————————————————————–
–tanim
——————————————————————————–
–olay_tarih
——————-
–J
–BEFORE INSERT
–07/24/2008 08:03:08
–H
–BEFORE INSERT
–07/24/2008 08:03:08
–isim
——————————————————————————–
–tanim
——————————————————————————–
–olay_tarih
——————-
–G
–BEFORE INSERT
–07/24/2008 08:03:08
 
ISIM
TANIM
OLAY_TARIH
J
BEFORE INSERT
02/01/2012 08:46:54
H
BEFORE INSERT
02/01/2012 08:46:54
G
BEFORE INSERT
02/01/2012 08:46:54
begin-end ifadesini aynı anda çalıştırmamıza rağmen hepsi için trigger ayrı ayrı devreye girdi.
——
——–
DROP TABLE isci_tazminat;
–TABLE dropped.
——–
DROP TABLE isci_durum;
——–

–TABLE dropped.

 

——–Teşekkürler———————–

Hakkında Mustafa Aksoy

Sakarya Üniversitesi Bilgisayar Mühendisliği mezunuyum. DWH/ETL ve Microstrategy Developer olarak çalışma hayatıma devam etmekteyim. İlgi alanlarım ve bildiğim teknolojiler; PL/SQL, ODI, ETL Circle, Data Guard,Reporting,Microstrategy ve Talend(ETL Tool)

Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*


Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>