CREATE TRIGGER(7) yeni bir tetik tanımlar

KULLANIM

CREATE TRIGGER isim { BEFORE | AFTER } { olay [ OR ... ] }
  ON tablo [ FOR [ EACH ] { ROW | STATEMENT } ]
  EXECUTE PROCEDURE işlev_ismi ( argümanlar )

AÇIKLAMA

CREATE TRIGGER yeni bir tetik oluşturur. Tetik belirtilen tablo ile ilişkilendirilecek ve belli bir olay meydana geldiğinde işlev_ismi ile belirtilen işlevi çalıştıracaktır.

Tetiğin ya bir satır üzerinde işlem yapılmaya çalışılmadan önce (kısıtlar sınanmadan ve INSERT, UPDATE veya DELETE yapılmadan önce) ya da işlem tamamlandıktan sonra (kısıtlar sınandıktan ve INSERT, UPDATE veya DELETE tamamlandıktan sonra) çalışacağı belirtilebilir. Eğer tetik olaydan önce çalışırsa, geçerli satır için işlemi atlayabilir ya da veri girilen satır değişebilir (sadece INSERT ve UPDATE işlemleri için). Eğer tetik olaydan sonra çalışırsa, tüm değişiklikler, son veri girme, güncelleme veya silme işlemi tetiğe görünür olur.

FOR EACH ROW imli bir tetik işlemi değiştiren her satır için bir defa çağrılır. Örneğin, 10 satırı etkileyen bir DELETE, her satır silinişinde bir kere olmak üzere 10 ayrı defa ON DELETE tetiğinin çağrılmasına sebep olur. Tersine, FOR EACH STATEMENT imli bir tetik belirtilen bir işlem için işlemin kaç satırı etkilediğinden bağımsız olarak, sadece bir defa çalıştırılır (hatta, işlem hiçbir satırı değiştirmese bile tetik yine de çalıştırılacaktır).

Eğer aynı olay için aynı türden çok sayıda tetik tanımlanmışsa, bunlar isimlerine göre alfabetik sırayla çalıştırılırlar.

SELECT herhangi bir satırı değiştirmediğinden, SELECT tetikleri oluşturamazsınız. Kurallar ve sanal tablolar böyle durumlarda daha uygundur.

Tetikler hakkında daha fazla bilgi edinmek için
http://www.postgresql.org/docs/8.0/static/triggers.html adresine bakınız.

PARAMETRELER


isim
Yeni tetiği belirtecek isim. Bu isim, aynı tablodaki diğer tetiklerin isimlerinden farklı olmalıdır.

BEFORE, AFTER
İşlevin olaydan önce mi sonra mı çağrılacağını belirler.

olay
INSERT, UPDATE veya DELETE'den biri; tetiği çalıştıracak olayı belirtmek için kullanılır. OR kullanarak çok sayıda olay belirtilebilir.

tablo
Tetiği içerecek tablonun ismi (şema nitelemeli olabilir).

FOR EACH ROW, FOR EACH STATEMENT
Tetik işlevinin tetikleyici olay tarafından her satır için bir kere mi yoksa her SQL deyimi için bir kere mi çalıştırılacağını belirler. Eğer hiçbiri belirtilmemişse, FOR EACH STATEMENT öntanımlıdır.

işlev_ismi
Tetikle çalıştırılan, kullanıcı tarafından argümansız ve dönüş türü trigger olarak bildirilmiş ve tanımlanmış bir işlev.

argümanlar
Tetik tarafından çalıştırıldığında işleve aktarılacak isteğe bağlı argümanların virgülle ayrılmış listesi. Argümanlar dizge sabitlerdir. Basit isimler ve sayısal sabitler de burada yazılabilir, fakat her biri dizgeye dönüştürülecektir. Tetikleyici işlev dilinin nasıl gerçeklendiğini incelemeniz ve işlev içinde tetik argümanlarına nasıl erişildiğini öğrenmeniz önerilir; normal işlev argümanlarından farklı ele alınıyor olabilirler.

EK BİLGİ

Bir tablo içinde bir tetik oluşturmak için, kullanıcı tablo üzerinde TRIGGER yetkisine sahip olmalıdır.

7.3 öncesi PostgreSQL sürümlerinde, işlevin dönüş türü olarak trigger değil, opaque bildiriliyordu. Eski sürüme ait döküm dosyalarını desteklemek için, CREATE TRIGGER opaque türünde değer döndüren işlevleri kabul edecek, ama işlevin bildirilen dönüş türünün trigger olarak değiştirilmesini belirten bir uyarı alacaksınız.

Bir tetiği silmek için DROP TRIGGER [drop_trigger(7)] kullanın.

ÖRNEKLER

http://www.postgresql.org/docs/8.0/static/triggers.html adresinde eksiksiz bir örnek bulacaksınız.

UYUMLULUK

CREATE TRIGGER cümlesinin PostgreSQL gerçeklenimi SQL:1999 standardının bir alt kümesini içerir. (SQL-92'de tetikler için bir madde yoktur.) Mevcut olmayan işlevsellik şöyle sıralanabilir:

·
SQL:1999 belli sütunların güncellenmesiyle çalıtırılacak tetiklere izin verir (AFTER UPDATE OF col1, col2 gibi).

·
SQL:1999 "eski" ve "yeni" satırlar için ya da tetikleyen eylemin (CREATE TRIGGER ... ON tabloismi REFERENCING OLD ROW AS birisim NEW ROW AS yeniisim ... gibi) tanımında kullanmak için tablolara takma isim tanımlamanıza izin verir. PostgreSQL tetik işlevlerinin kullanıcının seçimine bağlı olarak herhangi bir dilde yazılmasına izin verdiğinden veriye erişim seçilen dile özel yollarla olur.

·
PostgreSQL sadece tetikleyen eylem için kullanıcı tanımlı bir işlevin çalıştırılmasına izin verir. SQL:1999 ise, tetiklenen eylem olarak CREATE TABLE gibi başka SQL cümlelerinin çalıştırılmasına izin verir. Bu sınırlamanın, istenen SQL cümlelerini çalıştıracak kullanıcı tanımlı bir işlev oluşturarak çevresinden dolanmak hiç de zor değildir.

SQL:1999, çok sayıda tetiğin oluşturulma zamanı sırasına göre çalıştırılmasına izin verir. PostgreSQL ise çalışılması daha uygun olan isim sıralamasını kullanır.

ÇEVİREN

Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Nisan 2005