İ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