Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 3/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Trigger Oluşturma ve Oluşan Triggeri Tanımlama
#1
Veri tabanlı ile ilişkili çalışan sistemler bazı durumlarda bir takım işlevlerin Veri Tabanın tarafından otomatik yapılması daha pratik ve daha sağıklı olacağı için trigger denilen tetikleyiciler kullanılır.
Bu tetikleyiciler iki aşamada tanımlanır ve kullanılır.
1. Adım Trigger içeriği çalışacağı zaman neleri yapacağını bildirdiğimiz bir fonksiyon gibi,
2. Adım ise tanımlanan trigger/fonksiyonun hangi tabloda ne zaman çalışacağının tanımı olacaktır.

Buna bir örnek olması için ben faturalar isimli tablodaki ara_toplam değerini yeni kayıt girildiğinde veya olan bir kayıt güncelleme işlemi yapıldığın sürekli olarak bu rakamların değişme durumu var.
Bu değişen rakamlar üzerinden hesaplama yaparak ara_toplam değerini otomatik güncelleme yapacağım.

1. Adım trigger tanımala yapılacak işleri gösteren çalışacak kod
CREATE OR REPLACE FUNCTION fatura_ara_toplam()
 RETURNS trigger AS
$BODY$DECLARE
   BEGIN
IF (TG_OP = 'UPDATE') THEN
UPDATE faturalar SET 
ara_toplam=abs(toplam_tutar-toplam_iskonto_tutar)
WHERE faturalar.id=NEW.id;
ELSIF (TG_OP = 'INSERT') THEN
UPDATE faturalar SET 
ara_toplam=abs(toplam_tutar-toplam_iskonto_tutar),
WHERE faturalar.id=NEW.id;
END IF;

       RETURN NULL;
   END;
$BODY$
 LANGUAGE plpgsql VOLATILE SECURITY DEFINER
 COST 100;
ALTER FUNCTION fatura_ara_toplam()
 OWNER TO postgres;


2. Adım ise bu kodun hangi tabloda hangi tetikleme ile çalışacağı.
fatular tablosunda INSERT işleminden sonra her satır için fatura_ara_toplam triggeri çalıştırır.
AFTER INSERT ON faturalar FOR EACH ROW
Fakat bu şekilde çalıştırılırsa herhangi bir kayıt girilmesi durumunda tablodaki kayıt sayısı kadar trigger çalışır ve sisteme gereksiz bir yük bindirir.

CREATE TRIGGER kdv_matrah_after
 AFTER INSERT ON faturalar FOR EACH ROW
 EXECUTE PROCEDURE fatura_ara_toplam();


veya 
fatular tablosunda UPDATE işleminden sonra her satır için çalışır fakat WHEN kısmında ise bir koşul var oradaki koşula uyan satırlar için çalışacaktır.
Yani burada bir önceki adım gibi bit kayıt girildiğinde bütün kayıtları etkileyen bir çalışma yok.

AFTER INSERT ON faturalar FOR EACH ROW
CREATE TRIGGER kdv_matrah_after_update
 AFTER UPDATE
 ON faturalar
 FOR EACH ROW
 WHEN ((old.* IS DISTINCT FROM new.*))
 EXECUTE PROCEDURE fatura_ara_toplam();

Bunun gibi trigger işlemlerini bir çok yerde kullanılabiliriz.
Mesela sisteme giriş yapan kullanıcı ile ilgili olarak bir takım bilgileri değiştirebilir veya 
Bir stok programında ürününün ortalama maliyetini hesaplayabiliriz. Her seferinde sql sorgu çalıştırarak ortalama maliyet hesaplama yerine veri tabanına bir ortalama_maliyet bilgisi alanı açıp orayı da triggere bağlı güncelle dediğiniz zaman hiç bir işlem yapmanıza gerek kalmadan ortalama_maliyet alanındaki bilgiyi alarak kullanabiliriz.
PostgreSQL - Linux - Delphi
Cevapla
#2
Foruma katkılarınızdan dolayı teşekkürler. Emeğinize sağlık.
There's no place like 127.0.0.1
WWW
Cevapla
#3
Teşekkür ederiz rdbms lerin bu nimetlerinden faydalanmak işi çok rahatlatıyor örn.caribakiye hesaplama yı bir defa stored procedure olarak yaz trigerlarla execute et bir daha caribakiye hesaplamayı unut.

“Do. Or do not. There is no try.”
Cevapla
#4
(07-02-2017, Saat: 13:43)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlForuma katkılarınızdan dolayı teşekkürler. Emeğinize sağlık.

Teşekkür ederim hocam. Gerçekten işim gereği çok çok az vaktim oluyor. Fakat bu forumdan ve bundan önceki delphiturkiye forumundan zaman zaman bilgi edindiğim olmuştu.

Bende bir şeyler katmak adına bir şekilde zaman ayırmaya çalışıyorum. Kısa kısa birilerinin işine yarar diye yazıyorum.
PostgreSQL - Linux - Delphi
Cevapla
#5
(07-02-2017, Saat: 13:53)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlTeşekkür ederiz rdbms lerin bu nimetlerinden faydalanmak işi çok rahatlatıyor örn.caribakiye hesaplama yı bir defa stored procedure olarak yaz trigerlarla execute et bir daha caribakiye hesaplamayı unut.

Merhaba,
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol Çorbasında  Smile  Sizin de bir tuzunuz olması adına; belirttiğiniz konu ile ilgili uygun bir zamanınızda, örnek paylaşarak katkıda bulunursanız sevinirim.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#6
(08-02-2017, Saat: 08:53)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(07-02-2017, Saat: 13:53)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlTeşekkür ederiz rdbms lerin bu nimetlerinden faydalanmak işi çok rahatlatıyor örn.caribakiye hesaplama yı bir defa stored procedure olarak yaz trigerlarla execute et bir daha caribakiye hesaplamayı unut.

Merhaba,
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol Çorbasında  Smile  Sizin de bir tuzunuz olması adına; belirttiğiniz konu ile ilgili uygun bir zamanınızda, örnek paylaşarak katkıda bulunursanız sevinirim.

Kodlarımı utanılmayacak bi hale getirip Big Grin  bir kaç örnek paylaşırım İnşaAllah.

“Do. Or do not. There is no try.”
Cevapla
#7
(08-02-2017, Saat: 14:54)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(08-02-2017, Saat: 08:53)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol Çorbasında  Smile  Sizin de bir tuzunuz olması adına; belirttiğiniz konu ile ilgili uygun bir zamanınızda, örnek paylaşarak katkıda bulunursanız sevinirim.

Kodlarımı utanılmayacak bi hale getirip Big Grin  bir kaç örnek paylaşırım İnşaAllah.

Kodlama birkaç türlüdür. Smile

- Günü kurtarmak için yazılan
- Copy-Paste yöntemi ile kullanılan (yazılmaz, kullanılır.)
- Doğaçlama (muhtemelen sizin kullandığınız yöntem)
- Hiyerarşik (OOP, Lib., comp. vb)

Utanılmayacak yöntemi ilk defa duydum. Smile
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#8
O kodlama yöntemi bende de mevcut Fesih hocam kodlama türlerine bence eklenmeli Smile
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  PostgreSql Seri Oluşturma mad85 0 110 02-01-2018, Saat: 16:25
Son Yorum: mad85



Konuyu Okuyanlar: 1 Ziyaretçi