Provided by: manpages-tr_1.0.5.1-2_all bug

ISIM

       CREATE TRIGGER - yeni bir tetik tanimlar

KULLANIM

       CREATE TRIGGER isim { BEFORE | AFTER } { olay [ OR ... ] }
           ON tablo [ FOR [ EACH ] { ROW | STATEMENT } ]
           EXECUTE PROCEDURE i,slev_ismi ( arg"umanlar )

A,CIKLAMA

       CREATE  TRIGGER  yeni  bir  tetik olusturur. Tetik belirtilen tablo ile
       iliskilendirilecek ve belli bir olay meydana geldiginde i,slev_ismi  ile
       belirtilen islevi calistiracaktir.

       Tetigin  ya  bir  satir  uzerinde  islem  yapilmaya  calisilmadan  once
       (kisitlar sinanmadan ve INSERT, UPDATE veya DELETE yapilmadan once)  ya
       da  islem  tamamlandiktan sonra (kisitlar sinandiktan ve INSERT, UPDATE
       veya DELETE tamamlandiktan sonra) calisacagi belirtilebilir. Eger tetik
       olaydan  once  calisirsa,  gecerli  satir icin islemi atlayabilir ya da
       veri girilen satir  degisebilir  (sadece  INSERT  ve  UPDATE  islemleri
       icin).  Eger tetik olaydan sonra calisirsa, tum degisiklikler, son veri
       girme, guncelleme veya silme islemi tetige gorunur olur.

       FOR EACH ROW imli bir tetik islemi degistiren her satir icin  bir  defa
       cagrilir.   Ornegin,   10   satiri  etkileyen  bir  DELETE,  her  satir
       silinisinde bir kere olmak uzere  10  ayri  defa  ON  DELETE  tetiginin
       cagrilmasina  sebep  olur.  Tersine,  FOR EACH STATEMENT imli bir tetik
       belirtilen bir islem icin islemin kac  satiri  etkilediginden  bagimsiz
       olarak,  sadece  bir  defa  calistirilir  (hatta,  islem  hicbir satiri
       degistirmese bile tetik yine de calistirilacaktir).

       Eger ayni olay icin ayni turden cok sayida tetik tanimlanmissa,  bunlar
       isimlerine gore alfabetik sirayla calistirilirlar.

       SELECT   herhangi   bir  satiri  degistirmediginden,  SELECT  tetikleri
       olusturamazsiniz. Kurallar ve  sanal  tablolar  boyle  durumlarda  daha
       uygundur.

       Tetikler hakkinda daha fazla bilgi edinmek icin
       http://www.postgresql.org/docs/8.0/static/triggers.html        adresine
       bakiniz.

PARAMETRELER

       isim   Yeni tetigi belirtecek  isim.  Bu  isim,  ayni  tablodaki  diger
              tetiklerin isimlerinden farkli olmalidir.

       BEFORE, AFTER
              Islevin olaydan once mi sonra mi cagrilacagini belirler.

       olay   INSERT,  UPDATE  veya DELETE'den biri; tetigi calistiracak olayi
              belirtmek  icin  kullanilir.  OR  kullanarak  cok  sayida   olay
              belirtilebilir.

       tablo  Tetigi icerecek tablonun ismi (sema nitelemeli olabilir).

       FOR EACH ROW, FOR EACH STATEMENT
              Tetik  islevinin  tetikleyici olay tarafindan her satir icin bir
              kere mi yoksa her SQL deyimi icin bir kere mi  calistirilacagini
              belirler.  Eger  hicbiri  belirtilmemisse,  FOR  EACH  STATEMENT
              ontanimlidir.

       i,slev_ismi
              Tetikle calistirilan, kullanici tarafindan argumansiz  ve  donus
              turu trigger olarak bildirilmis ve tanimlanmis bir islev.

       arg"umanlar
              Tetik  tarafindan  calistirildiginda  isleve  aktarilacak istege
              bagli argumanlarin virgulle ayrilmis listesi.  Argumanlar  dizge
              sabitlerdir.   Basit  isimler  ve  sayisal  sabitler  de  burada
              yazilabilir,   fakat   her   biri   dizgeye   donusturulecektir.
              Tetikleyici  islev  dilinin nasil gerceklendigini incelemeniz ve
              islev icinde tetik argumanlarina nasil  erisildigini  ogrenmeniz
              onerilir;  normal  islev  argumanlarindan  farkli  ele  aliniyor
              olabilirler.

EK BILGI

       Bir tablo icinde bir tetik olusturmak icin,  kullanici  tablo  uzerinde
       TRIGGER yetkisine sahip olmalidir.

       7.3  oncesi  PostgreSQL surumlerinde, islevin donus turu olarak trigger
       degil,  opaque  bildiriliyordu.  Eski  surume  ait  dokum   dosyalarini
       desteklemek   icin,   CREATE  TRIGGER  opaque  turunde  deger  donduren
       islevleri kabul edecek, ama islevin bildirilen  donus  turunun  trigger
       olarak degistirilmesini belirten bir uyari alacaksiniz.

       Bir tetigi silmek icin DROP TRIGGER [drop_trigger(7)] kullanin.

"ORNEKLER

       http://www.postgresql.org/docs/8.0/static/triggers.html       adresinde
       eksiksiz bir ornek bulacaksiniz.

UYUMLULUK

       CREATE TRIGGER cumlesinin PostgreSQL gerceklenimi SQL:1999 standardinin
       bir  alt  kumesini  icerir. (SQL-92'de tetikler icin bir madde yoktur.)
       Mevcut olmayan islevsellik soyle siralanabilir:

       .      SQL:1999   belli   sutunlarin   guncellenmesiyle   calitirilacak
              tetiklere izin verir (AFTER UPDATE OF col1, col2 gibi).

       .      SQL:1999 "eski" ve "yeni" satirlar icin ya da tetikleyen eylemin
              (CREATE TRIGGER ... ON tabloismi REFERENCING OLD ROW AS  birisim
              NEW ROW AS yeniisim ... gibi) taniminda kullanmak icin tablolara
              takma  isim   tanimlamaniza   izin   verir.   PostgreSQL   tetik
              islevlerinin  kullanicinin  secimine  bagli  olarak herhangi bir
              dilde yazilmasina izin verdiginden veriye  erisim  secilen  dile
              ozel yollarla olur.

       .      PostgreSQL  sadece  tetikleyen  eylem icin kullanici tanimli bir
              islevin calistirilmasina izin verir.  SQL:1999  ise,  tetiklenen
              eylem   olarak   CREATE   TABLE   gibi  baska  SQL  cumlelerinin
              calistirilmasina  izin  verir.  Bu  sinirlamanin,  istenen   SQL
              cumlelerini calistiracak kullanici tanimli bir islev olusturarak
              cevresinden dolanmak hic de zor degildir.

       SQL:1999,  cok  sayida  tetigin  olusturulma   zamani   sirasina   gore
       calistirilmasina izin verir. PostgreSQL ise calisilmasi daha uygun olan
       isim siralamasini kullanir.

ILGILI BELGELER

       CREATE FUNCTION [create_function(7)], ALTER TRIGGER [alter_trigger(7)],
       DROP TRIGGER [drop_trigger(7)].

,CEVIREN

       Nilgun Belma Buguner <nilgun (at) belgeler.gen.tr>, Nisan 2005