Triger
Triger
Arkadaşlar Triger tetiklenmesi için SP yazmamız gereklimi yalnız triger' a Kod yazsak veri işleyişine göre (KAYIT EKLEME, SİLME, DEĞİŞTİRME) gibi işlemlerde üstüne aldığı görevi yerine getirirmi? Yoksa illaki SP ile mi çağırmamız gereklimi?
Teşekkür Ederim.
İyi Çalışmalar.
Teşekkür Ederim.
İyi Çalışmalar.
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Arkadaşlar SP yazmamıza gerek kalmıyor.
Teşekkür Ederim
Teşekkür Ederim
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Merhabalar,
Hayır gerek yok. Aynen SP yazar gibi trigger yazabilirsin. Hatta yine SP gibi değişkenler bile tanımlayabilirsin.
Önce SP yaptım bunu bir trigerle çalıştırdım.
Sonra aynı şeyi direk Trigger le yaptım bir fark yok.
Hız farkı varmıdır bilemiyorum çünkü data sayım oldukça sınırlıydı.
Kolay gelsin.
Hayır gerek yok. Aynen SP yazar gibi trigger yazabilirsin. Hatta yine SP gibi değişkenler bile tanımlayabilirsin.
Önce SP yaptım bunu bir trigerle çalıştırdım.
Sonra aynı şeyi direk Trigger le yaptım bir fark yok.
Hız farkı varmıdır bilemiyorum çünkü data sayım oldukça sınırlıydı.
Kolay gelsin.
saygılar
Farkı yoksa SP ne tip durumlarda yazılır faydaları nelerdir. Niye SP yazılır ? + - yazarsanız sevinirim.
Teşekkür Ederim.
İyi Çalışmalar.
Teşekkür Ederim.
İyi Çalışmalar.
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Merhaba,
SP ile Query ile yazmak arasında 2 önemli fark var :
1. SP olarak yazılan kod veritabanı tarafında sadece bir kere derlenir ve planı hazırlanır. Yani stored procedure'u çalıştırdığınız zaman veritabanı execution planı oluşturmak için uğraşmaz. Query ile her seferinde bu plan oluşturulur. Tabii ki SP daha hızlı çalışır.
2. Query ile bir işlem yaparken, kayıtlar veritabanı ile client arasında gidder gelir. SP'de ise işlem veritabanı tarafında yapılıp, sadece sonuç client'a döner. Bu da müthiş bir hız farkı oluşturur.
Bunun dışında bir takım yan faydaları da var.
Mesela oluşturulan SP'yi başka ortamlardan da çağırıp, kolayca kullanabilirsiniz. Mesela biz oluşturduğumuz bazı SP'leri Php ile web üzerinden çalıştırıyoruz.
Kolay gelsin.
SP ile Query ile yazmak arasında 2 önemli fark var :
1. SP olarak yazılan kod veritabanı tarafında sadece bir kere derlenir ve planı hazırlanır. Yani stored procedure'u çalıştırdığınız zaman veritabanı execution planı oluşturmak için uğraşmaz. Query ile her seferinde bu plan oluşturulur. Tabii ki SP daha hızlı çalışır.
2. Query ile bir işlem yaparken, kayıtlar veritabanı ile client arasında gidder gelir. SP'de ise işlem veritabanı tarafında yapılıp, sadece sonuç client'a döner. Bu da müthiş bir hız farkı oluşturur.
Bunun dışında bir takım yan faydaları da var.
Mesela oluşturulan SP'yi başka ortamlardan da çağırıp, kolayca kullanabilirsiniz. Mesela biz oluşturduğumuz bazı SP'leri Php ile web üzerinden çalıştırıyoruz.
Kolay gelsin.
Merhaba
Anladım !!!
Teşekkürler.
Anladım !!!
Teşekkürler.
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Evet Hocam SP ile Triger karşılaştırması içindi.
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Trigger Nedir
Bir tablo üzerinde belirli bir olaya bağlı olarak tetiklenip çalışan SQL kodlarıdır. Tablo üzerindeki triggerları tetikleyen olaylar insert, update, delete olaylarıdır. Bu olaylara istinaden 3 ana tip triggerdan bahsedilir. Bunlar insert triggerı update triggerı, delete triggerı şeklindedir. Bir tablo üzerinde bu olayların öncesinde ve sonrasında tetiklenecek istenildiği kadar trigger yazılabilir. Fakat genel eğilim ve kullanım her bir olay için tek bir trigger kullanmak şeklindedir.
Örneğin stok hareketleri sonucunda stok miktarlarının azalması veya artması işlemlerinin, veya tahakkuk ve tahsilatlar sonucu cari hesapların etkilenmesi işlemlerinin triggerlar aracılığı ile yapılmaları tipik bir trigger kullanım yeridir. Ayrıca referential integrity’yi sağlamak amacı ile de trigger kullanımı çok tercih edilir. İlişkisel bir veritabanında örneğin PERSONEL tablosundaki kişinin bolum bilgisi amaçlı olarak BOLUM_NO tutulması ve bolumun adının da BOLUM tablosundan bulunması yapıldığını düşünürsek. Eğer 1 numaralı bolum herhangi bir personele kullanıldıysa BOLUM tablosundan BOLUM_NO değeri 1 olan kaydın kesinlikle silinememesi gerekmektedir. Bu tür kontrollerin yapılarak veri bütünlüğünün korunmasıdır referential integrity. Bu amaçla yazılan veya bir veritabanı tasarım aracı kullanıldıysa onun otomatik olarak yazdığı trigger kodları sayesinde bu bütünlük korunur. Çünkü BOLUM tablosunun delete trigger’inda gerekli kontrolleri yapacak kod yazılır ve eğer silinmek istenen BOLUM_NO herhangi bir personel için kullanıldıysa bu silme işlemine izin verilmez.
Stored Procedure
Stored Procedure ise bir tabloya bağlı olmaksızın veritabanı içinde tanımlanan belirli bir işi yapmaya yönelik kodlardır. Bu kodlar yazıldığı zaman aynı zamanda compile edildikleri için query optimizer tarafından optimize edilmiş en hızlı şekilde çalışmaya hazır kodlardır. Bu kodlar hem triggerlar içinden hem de veritabanı dışındaki her hangi bir ortamdan (Delphi içinden) kolayca çağırılabildikleri için kullanım amaçları geniştir.
Örneğin her türlü raporu stored procedure kullanarak yazmak mümkündür ve de tavsiye edilir. Örneğin Delphi tarafında veritabanı üzerinde işler yapan bir fonksiyonunuzu stored procedure haline getirmek işlemlerin çok daha hızlı çalışacak olması sebebi ile tavsiye edilir.
Trigger icinden yapmak istediklerinizi tabiki yapabilirsiniz. Bunu mutlaka ayri bir SP olarak cagirmak zorunda degilsiniz. Ama ayri SP olarak yazmanın bence 3 avantajı var.
Birincisi yapisal olup daha derli toplu olmasi. Daha okunabilir olmasi ve belki benzer işi bir başka yerden de yapacak olmanız durumunda kolaylık olması.
İkincisi ise benim gibi bir veritabanı tasarım aracı kullanıyorsanız bu arac sizin icin Refferantiel Integrity kurallarını işletemek icin Foreing Key ve trigger'lari yazmakta. Onun yazdıgı trigger'in altina siz uzun uzun kodlar eklediginizde ve tablo yapılarındaki degisikliklerden dolayı triggerlari tekrar olusturmanız gerektiginde yazdiginiz kodlari tekrar eklemeniz gerekiyor. Dolayisiyla da bir yerlerde kayıtlı olması gerekiyor. Eger SP olursa sadece SP'u cagirma kodunu kaydetmeniz yeterli hatta kaydetmeseniz bile kolayca tekrar yazabileceginiz bir kod oluyor...
Bir tablo üzerinde belirli bir olaya bağlı olarak tetiklenip çalışan SQL kodlarıdır. Tablo üzerindeki triggerları tetikleyen olaylar insert, update, delete olaylarıdır. Bu olaylara istinaden 3 ana tip triggerdan bahsedilir. Bunlar insert triggerı update triggerı, delete triggerı şeklindedir. Bir tablo üzerinde bu olayların öncesinde ve sonrasında tetiklenecek istenildiği kadar trigger yazılabilir. Fakat genel eğilim ve kullanım her bir olay için tek bir trigger kullanmak şeklindedir.
Örneğin stok hareketleri sonucunda stok miktarlarının azalması veya artması işlemlerinin, veya tahakkuk ve tahsilatlar sonucu cari hesapların etkilenmesi işlemlerinin triggerlar aracılığı ile yapılmaları tipik bir trigger kullanım yeridir. Ayrıca referential integrity’yi sağlamak amacı ile de trigger kullanımı çok tercih edilir. İlişkisel bir veritabanında örneğin PERSONEL tablosundaki kişinin bolum bilgisi amaçlı olarak BOLUM_NO tutulması ve bolumun adının da BOLUM tablosundan bulunması yapıldığını düşünürsek. Eğer 1 numaralı bolum herhangi bir personele kullanıldıysa BOLUM tablosundan BOLUM_NO değeri 1 olan kaydın kesinlikle silinememesi gerekmektedir. Bu tür kontrollerin yapılarak veri bütünlüğünün korunmasıdır referential integrity. Bu amaçla yazılan veya bir veritabanı tasarım aracı kullanıldıysa onun otomatik olarak yazdığı trigger kodları sayesinde bu bütünlük korunur. Çünkü BOLUM tablosunun delete trigger’inda gerekli kontrolleri yapacak kod yazılır ve eğer silinmek istenen BOLUM_NO herhangi bir personel için kullanıldıysa bu silme işlemine izin verilmez.
Stored Procedure
Stored Procedure ise bir tabloya bağlı olmaksızın veritabanı içinde tanımlanan belirli bir işi yapmaya yönelik kodlardır. Bu kodlar yazıldığı zaman aynı zamanda compile edildikleri için query optimizer tarafından optimize edilmiş en hızlı şekilde çalışmaya hazır kodlardır. Bu kodlar hem triggerlar içinden hem de veritabanı dışındaki her hangi bir ortamdan (Delphi içinden) kolayca çağırılabildikleri için kullanım amaçları geniştir.
Örneğin her türlü raporu stored procedure kullanarak yazmak mümkündür ve de tavsiye edilir. Örneğin Delphi tarafında veritabanı üzerinde işler yapan bir fonksiyonunuzu stored procedure haline getirmek işlemlerin çok daha hızlı çalışacak olması sebebi ile tavsiye edilir.
Trigger icinden yapmak istediklerinizi tabiki yapabilirsiniz. Bunu mutlaka ayri bir SP olarak cagirmak zorunda degilsiniz. Ama ayri SP olarak yazmanın bence 3 avantajı var.
Birincisi yapisal olup daha derli toplu olmasi. Daha okunabilir olmasi ve belki benzer işi bir başka yerden de yapacak olmanız durumunda kolaylık olması.
İkincisi ise benim gibi bir veritabanı tasarım aracı kullanıyorsanız bu arac sizin icin Refferantiel Integrity kurallarını işletemek icin Foreing Key ve trigger'lari yazmakta. Onun yazdıgı trigger'in altina siz uzun uzun kodlar eklediginizde ve tablo yapılarındaki degisikliklerden dolayı triggerlari tekrar olusturmanız gerektiginde yazdiginiz kodlari tekrar eklemeniz gerekiyor. Dolayisiyla da bir yerlerde kayıtlı olması gerekiyor. Eger SP olursa sadece SP'u cagirma kodunu kaydetmeniz yeterli hatta kaydetmeseniz bile kolayca tekrar yazabileceginiz bir kod oluyor...
Fahrettin Abi Eline Sağlık Çok açıklayıcı olmuş.
Teşekkür Ederim.
Teşekkür Ederim.
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Arkadaşlar Triger ile bir alanın Null olup olmadığının karşılaştırmasını yapmak istiyorum ve karşılaştırma sonucunda da Null değer varsa toplama sokmak için null değeri 0 görmesini istiyorum. Ben bunu çeşitli yollarla hallettim ama çok karmaşık oldu if ile çok basit bir şekilde nasıl halledebilirim. .En önemli problemim null karşılaştırmasını nasıl yapmalıyım.?
Birde isnull kullanarak null değere 0 verebiliyormuyduk?.
Teşekkür ederim.
İyi Çalışmalar.
Birde isnull kullanarak null değere 0 verebiliyormuyduk?.
Teşekkür ederim.
İyi Çalışmalar.
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
Arkadaşım aceleyle yanlış yazmışım.
Aslında en önemli kelime ben bunu SQL içinde yapmak istiyorum kodum'u incelerseniz büyük bir ihtimalle dile getiremediğim anlaşılır.
Bu Triger'da
Buradaki amacım nakit işlemler tablosunda Alacak alanı null ise CariKart tablosunun Borc alanına kendisiyle birlikte Nakit işlemler borc alanını topla.Burada CariKart tablosundaki borc alanın null olup olmadığını nasıl sorgulattırabilirim bunun kısa bir komut veya fonksiyonu yok mu ama olayı SQL içerisinde halletmek istiyorum.
Teşekkür Ederim...

Aslında en önemli kelime ben bunu SQL içinde yapmak istiyorum kodum'u incelerseniz büyük bir ihtimalle dile getiremediğim anlaşılır.
Bu Triger'da
Kod: Tümünü seç
if (NakitIslemler.Alacak is null) Then
Update CariKart set (Carikart.Borc = Carikart.Borc + Nakitislemler.Borc) WHERE CariKart.CariKod = NakitIslemler.CariKod;
Teşekkür Ederim...
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Peki arkadaşlar veritabanı tablo tasarımı sırasında FireBird'e Default değer atayabiliyormuyuz?
Teşekkür Ederim.
İyi Akşamlar.
Teşekkür Ederim.
İyi Akşamlar.
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.