Stored Procedure ve Trigger Hakkında?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
shochan
Üye
Mesajlar: 89
Kayıt: 06 Eki 2008 04:54
Konum: Kayseri

Stored Procedure ve Trigger Hakkında?

Mesaj gönderen shochan »

S.a arkadaşlar bugüne kadar hiç sp ve trigger kullanmadım son 3-4 gündür forumda yazılan makeleleri okuyup uyguluyorum hatta bu konuda fahrettin hocam ve fatih hocamın çok güzel makaleleri var benim sormak istediğim şey şu:

Carilerin kaydedildiği CARI tablosu
Ürün girişleri için URUN_GIRIS tablosu ve
Ürün çıkış/satış için URUN_CIKIS tablomuzun olduğunu varsayalım aralarında master detail ilişki olsa hangi cariye ne satış yada giriş yapıldığını görebiliriz fakat Fahrettin hocamın makalesindede olduğu gibi farklı zamanlarda aynı cari için ürün girişi yaptığımızda ürün miktarı yazdığımız sp ile artar ve azalırmı yoksa farklı farklı kayıt olarak mı görünür? Sorumu inşallah anlatabilmişimdir
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Stored Procedure ve Trigger Hakkında?

Mesaj gönderen mkysoft »

SP içinde inser görüyorsanız yeni kayıt olur, update varsa artar. ben makalelere bakmadım ancak Fahrettin hoca atlamaz, if yapısı koymuşta olabilir. kodu paylaşırsanız daha kolay yol gösterebiliriz sanırım.
Kullanıcı avatarı
shochan
Üye
Mesajlar: 89
Kayıt: 06 Eki 2008 04:54
Konum: Kayseri

Re: Stored Procedure ve Trigger Hakkında?

Mesaj gönderen shochan »

If yapısı kullanmış fakat benim dediğim gibi bi cari tablosu yok örnekte giriş tablosuna doğrudan değer girdiği için yazdığı sp gereği stok miktarı artıyo benim demek istediğim farklı zamanlarda farklı cariler için ürün girişi yapılırsa o cariye ait ürün girişlerine baktığımız zaman tek satırda toplam ürün miktarımı listenir yoksa her ürün girişi ayrı ayrı mı listelenir umarım anlatabilmişimdir. Fahrettin hocamın makalesindeki örnek:

Bir örnek ile hem trigger hem de stored procedure kullanımının teknik detayına inelim. Söyle bir örneğimiz olsun. Çok basit olarak bir URUN tablosu ve bu tabloda stok miktarı tutuluyor olsun. URUN_GIRIS ve URUN_SATIS seklinde 2 tane de ürünlerin hareketlerini tutacağımız farklı tablolar olsun. Tabloların yapısı şu şekilde olsun.

URUN (URUN_NO, URUN_ADI,STOK_MIKTARI)
URUN_GIRIS (URUN_NO, GIRIS_ZAMANI, GIRIS_MIKTARI)
URUN_SATIS (URUN_NO, SATIS_ZAMANI, SATIS_MIKTARI)
URUN_STOK (URUN_NO, STOK_MIKTARI)

Tabloları ilişkisel bir şekilde oluşturacak SQL kodu son bölümde ek olarak verilmiştir.

Şimdi yapmak istediğimizi açıklayalım. URUN_GIRIS tablosuna kayıtlar girdikçe yani bir üründen belirli miktarlarda girişler yapıldıkça o ürüne ait URUN tablosundaki STOK_MIKTARI alanının değerini giriş miktarı kadar arttırmalıyız. Tabi ki bunun tersi de olabilmeli yani yapılmış bir ürün girişi kaydı silinirse de bu sefer STOK_MIKTARI değeri silinen giriş kadar azaltılarak eski haline getirilmeli. Ve de eğer giriş miktarı diyelim ki 100 adet iken 50 adet olarak değiştirilirse de bu sefer bu duruma göre o ürünün STOK_MIKTARI alanı güncellenebilmeli. Bunu şu şekilde yapacağız. Öncelikle bir stored procedure yazacağız bu stored procedure’e parametre olarak URUN_NO ve GIRIS_MIKTARI’ nı göndereceğiz ve ilgili ürünün STOK_MIKTARI’ nı giriş miktarı kadar arttıracak. Yazdığımız bu stored procedure’ u de URUN_GIRIS tablosunun insert triggerından çağıracağız.

Insert triggerından çağıracağımız stored procedure’un adı SPI_URUN_GIRIS olsun. Bu procedur’un kodu şu şekildedir.

Kod: Tümünü seç

Interbase için 
CREATE PROCEDURE SPI_URUN_GIRIS (  URUN_NO INTEGER,  GIRIS_MIKTARI INTEGER)  AS    
DECLARE VARIABLE DLR_KAYIT_SAYISI integer; 
begin 
  select count(*) 
  from URUN_STOK where URUN_NO = :URUN_NO 
  INTO DLR_KAYIT_SAYISI; 
  if (DLR_KAYIT_SAYISI=0) then 
    insert into URUN_STOK(URUN_NO,STOK_MIKTARI) values(:URUN_NO,0); 
  update URUN_STOK set 
    STOK_MIKTARI = STOK_MIKTARI+:GIRIS_MIKTARI where 
    URUN_NO = :URUN_NO; 
End
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Re: Stored Procedure ve Trigger Hakkında?

Mesaj gönderen mrtblt »

Mantiken urun hareketleri icin iki ayri table tutmanin dogru bir fikir oldugunu dusunmuyorum. Tek bir hareket tablosu tut ve hareket tipi diye bir Alan ekle. Isini bayagi kolaylastirir
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Stored Procedure ve Trigger Hakkında?

Mesaj gönderen mkysoft »

Örnek olarak verildiği için sorun yok @mrblt. @shochan URUN tablosunda her ürün için tek bir kayıt olacaktır. Oradaki if yapısıda zaten kaydın olup olmadığını sorguluyor (0 değeri dönerse kayıt yoktur). Fahrettin abi burada triggerları direk kullanmak yerine strored procedure kullanmayı tercih etmiş. Aslında direk triggerlarlada bu işlem yapılabilir. Triggerlar mevcut kayıt eklem silme,güncelleme işlemlerini hiç bir şekilde engellemez (engelleme amacıyla yazılmadıysa).
Kullanıcı avatarı
shochan
Üye
Mesajlar: 89
Kayıt: 06 Eki 2008 04:54
Konum: Kayseri

Re: Stored Procedure ve Trigger Hakkında?

Mesaj gönderen shochan »

Verdiğiniz bilgiler için teşekkür ederim şuan bilgisayarımda programlamaya dair bişey olmadığı için kafama takıldı sorma gereği duydum :) herkese iyi çalışmalar :bravo:
  • Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Cevapla