Trigger içerisindeki "old.field" and "new.fie
-
- Üye
- Mesajlar: 53
- Kayıt: 01 Haz 2005 11:47
Trigger içerisindeki "old.field" and "new.fie
Selamlar,
Trigger içerisinde "old.field_name" ve "new.field_name" tanımları var.
Eğer bir alan değişmedi ise "new.field_name" ' in içeriğinde yine de bilgi bulunur mu ?
Teşekkürler.
Trigger içerisinde "old.field_name" ve "new.field_name" tanımları var.
Eğer bir alan değişmedi ise "new.field_name" ' in içeriğinde yine de bilgi bulunur mu ?
Teşekkürler.
-
- Kıdemli Üye
- Mesajlar: 1026
- Kayıt: 11 Şub 2005 02:12
- Konum: İstanbul
Bulunur. Aslında bu soruyu sormak yerine denemek sanırım daha kolay olurdu
.
Alanın değişip değişmediğini ise:
şeklinde öğrenebilirsin.

Alanın değişip değişmediğini ise:
Kod: Tümünü seç
if (old.alan = new.alan) then
....
....
....
şeklinde öğrenebilirsin.
-
- Üye
- Mesajlar: 53
- Kayıt: 01 Haz 2005 11:47
Teşekkürler.Ali Erdoğan yazdı:Bulunur. Aslında bu soruyu sormak yerine denemek sanırım daha kolay olurdu.
Alanın değişip değişmediğini ise:
Kod: Tümünü seç
if (old.alan = new.alan) then .... .... ....
şeklinde öğrenebilirsin.
"Neden denemiyorsun" sorusuna hazırlıklıydım zaten

Kod: Tümünü seç
if (old.alan = new.alan) then
....
....
....
Çalışınca bir mail grubuna yeni bilgileri mail gönderiyor.
Mail gitsin istemedim, onun dışında nasıl test edeceğimi de bilemedim.
Yani consola bir yazı yazmak falan varmıdır onu da bilmiyorum aslında.
FireBird'a başlayalı 1 hafta oldu, 1 hafta sonra da bırakırım sanırım

-
- Üye
- Mesajlar: 53
- Kayıt: 01 Haz 2005 11:47
Eee ?
O zaman ben trigger içerisinde bir alanın değiştiğini nasıl anlarım ki ?
Açıklıyayım :
Bir tablo üzerinde trigger yazdım. Bir de mail gönderen UDF var.
3 ayrı tablo alanı üzerinde değişiklik varsa bu alanların eski değerlerini ve yeni değerlerini kullanıcıya mail ediyor.
Örnek :
Yukarıdaki örnekte FAKS alanı değişmiş ama diğerleri değişmemiş.
Dolayısı ile eğer alanda değişiklik yoksa ilgili alanın Yeni değerini BOŞ göndermeliyim ki, UDF içerisinde karşılaştırma yapabileyim ve değişmeyen alanları mail ile göndermiyeyim.
İnşallah anlatabilmişimdim.
Cevaplar için şimdiden teşekkürler.
O zaman ben trigger içerisinde bir alanın değiştiğini nasıl anlarım ki ?
Açıklıyayım :
Bir tablo üzerinde trigger yazdım. Bir de mail gönderen UDF var.
3 ayrı tablo alanı üzerinde değişiklik varsa bu alanların eski değerlerini ve yeni değerlerini kullanıcıya mail ediyor.
Örnek :
Kod: Tümünü seç
ESKİ DEĞERLER | YENİ DEĞERLER
ADI SOYADI AHMET POLAT AHMET POLAT
TELEFON 333 33 33 333 33 33
FAKS 444 44 44 555 55 55
Yukarıdaki örnekte FAKS alanı değişmiş ama diğerleri değişmemiş.
Dolayısı ile eğer alanda değişiklik yoksa ilgili alanın Yeni değerini BOŞ göndermeliyim ki, UDF içerisinde karşılaştırma yapabileyim ve değişmeyen alanları mail ile göndermiyeyim.
İnşallah anlatabilmişimdim.
Cevaplar için şimdiden teşekkürler.
s.a.
peki bu karşılaştırma işlemini udf den yapsan olmazmı.?
trigerlarde değişken kullanabilirsin.
değişkenlere sadece değişen alanların datasını atarsın.
udf ye de parametre olarak değişkenleri gönderirsin.
kolay gelsin.
peki bu karşılaştırma işlemini udf den yapsan olmazmı.?
trigerlarde değişken kullanabilirsin.
değişkenlere sadece değişen alanların datasını atarsın.
udf ye de parametre olarak değişkenleri gönderirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 53
- Kayıt: 01 Haz 2005 11:47
Evet ben de öyle yapmayı, yani karşılaştırmayı UDF'den yapmayı düşünüyorum.aslangeri yazdı:s.a.
peki bu karşılaştırma işlemini udf den yapsan olmazmı.?
trigerlarde değişken kullanabilirsin.
değişkenlere sadece değişen alanların datasını atarsın.
udf ye de parametre olarak değişkenleri gönderirsin.
kolay gelsin.
Ama UDF'e hem OLD hem de NEW'i gönderiyorum.
OLD ve NEW aynı olduğu için (ilgili alanda değişiklik olmasa bile aynı olduğu için) UDF'den de karşılaştırma yaptığımda alanlar eşit oluyor.
Yani değiştiğiniz anlayamıyorum.
Değiştiğini Trigger'dan anlayıp, değişmediyse NEW VALUE ' yu UDF'e gönderirken boş göndermeliyim ki, UDF'de karşılaştırma yapabileyim.
-
- Üye
- Mesajlar: 53
- Kayıt: 01 Haz 2005 11:47
Bu arada farazi konuşmuş olmamak için de aşağıda TRIGGER kodumu vereyim.
Yapmak istediğim ise şu :
EĞER "DEPARTMENT" alanında değişiklik YAPILDIYSA
OLD.DEPARTMENT ve NEW.DEPARTMENT alanlarını UDF'e parametre olarak geç.
EĞER "DEPARTMENT" alanında değişiklik YOKSA OLD.DEPARTMENT alanını gönder ancak NEW.DEPARTMENT alanını "BOŞ" gönder.
Bu sayede ben UDF tarafında
if eski_bolum<>yeni_bolum then ...
gibi bir işlem yapabileceğim.
Kod: Tümünü seç
AS
declare variable sonuc varchar(200);
declare variable eski_firma varchar(200);
declare variable eski_departman varchar(200);
declare variable yeni_departman varchar(200);
declare variable eski_bolum varchar(200);
declare variable yeni_bolum varchar(200);
begin
SELECT companyname FROM company where companyid=old.companyid INTO :eski_firma;
SELECT description FROM departments where (department=old.department AND companyid=old.companyid) INTO :eski_departman;
SELECT description FROM departments where (department=new.department AND companyid=new.companyid) INTO :yeni_departman;
SELECT description FROM subdepartments where (subdepartment=old.subdepartment AND companyid=old.companyid) INTO :eski_bolum;
SELECT description FROM subdepartments where (subdepartment=new.subdepartment AND companyid=old.companyid) INTO :yeni_bolum;
/* Trigger text */
if (((old.exitdate is NULL) AND (new.exitdate is not NULL)) OR (old.department<>new.department) OR (old.subdepartment<>new.subdepartment)) then
begin
sonuc=yep(new.PAYROLLEMPNO,new.name,eski_firma,eski_departman,old.empno,yeni_departman,old.companyid,new.exitdate,eski_bolum,yeni_bolum);
end
end
Yapmak istediğim ise şu :
EĞER "DEPARTMENT" alanında değişiklik YAPILDIYSA
OLD.DEPARTMENT ve NEW.DEPARTMENT alanlarını UDF'e parametre olarak geç.
EĞER "DEPARTMENT" alanında değişiklik YOKSA OLD.DEPARTMENT alanını gönder ancak NEW.DEPARTMENT alanını "BOŞ" gönder.
Bu sayede ben UDF tarafında
if eski_bolum<>yeni_bolum then ...
gibi bir işlem yapabileceğim.
-
- Üye
- Mesajlar: 53
- Kayıt: 01 Haz 2005 11:47
Veri tabanında Exceptions kısmında aşağıdaki gibi bir EXCEPTION tanımlanıp;
Daha sonra da SP veya TRIGGER de uygun yere; şeklinde mesajlar verdirilebilir 
Kod: Tümünü seç
CREATE EXCEPTION DUR 'BEKLEME NOKTASI';
Kod: Tümünü seç
EXCEPTION DUR 'Buraya geldi...';

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
-
- Kıdemli Üye
- Mesajlar: 1026
- Kayıt: 11 Şub 2005 02:12
- Konum: İstanbul
Hocam ilk mesajımda da yazmıştım. Eğer old değeri new değerinden farklı ise alan değişmiş demektir. Bu iş bu kadar basit.delphi_programmer yazdı:Arkadaşlar kodların karışık olduğuna aldanmayın:)
Sadece Trigger içinde ilgili field'da değişiklik yapılıp yapılmadığını bilsem o da yetecek, lütfen
Kod: Tümünü seç
if (old.alan <> new.alan) then
begin
alan değişdiğinde yapılacak işlemler....
end
-
- Üye
- Mesajlar: 53
- Kayıt: 01 Haz 2005 11:47
Ali Erdoğan teşekkürler.
Onun öyle olduğunu zaten biliyordum ama problem Delphi tarafındaymış.
UDF'a gönderdiğim parametreleri mecburen PCHAR cinsinden tanımlanmıştım.
Delphi tarafında
yapmıştım ancak bu karşılaştırma çalışmıyordu.
şeklinde değiştirince problem çözülmüş oldu.
Yakın zamanda Makaleler kısmına (veya neresi uygunsa oraya) Trigger içerisinde, "table üzerinde değişen bilgileri UDF aracılığı ile mail gönderme" gibi bir konu açıp göndereceğim.
Konunun çözülmesine yardımcı olan tüm arkadaşlara teşekkürler.
Onun öyle olduğunu zaten biliyordum ama problem Delphi tarafındaymış.
UDF'a gönderdiğim parametreleri mecburen PCHAR cinsinden tanımlanmıştım.
Delphi tarafında
Kod: Tümünü seç
if eski_deger<>yeni_deger then ...
Kod: Tümünü seç
if string(eski_deger)<>string(yeni_deger) then ...
Yakın zamanda Makaleler kısmına (veya neresi uygunsa oraya) Trigger içerisinde, "table üzerinde değişen bilgileri UDF aracılığı ile mail gönderme" gibi bir konu açıp göndereceğim.
Konunun çözülmesine yardımcı olan tüm arkadaşlara teşekkürler.