İSİM¶
CREATE TRIGGER - 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.
İLGİLİ BELGELER¶
CREATE FUNCTION [
create_function(7)],
ALTER TRIGGER
[
alter_trigger(7)],
DROP TRIGGER [
drop_trigger(7)].
ÇEVİREN¶
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>,
Nisan 2005