CREATE TRIGGER GIRIS_AI0 FOR GIRIS
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE MALZEME_ID INT;
DECLARE VARIABLE MALZEME VARCHAR(100);
DECLARE VARIABLE GRUP VARCHAR(100);
begin
SELECT
NEW.MALZEME_ID,
MALZEME.MALZEME,
GRUP.GRUP
FROM
NEW
LEFT OUTER JOIN MALZEME ON NEW.MALZEME_ID = MALZEME.ID
LEFT OUTER JOIN GRUP ON MALZEME.GRUP_ID = GRUP.ID
INTO
:MALZEME_ID, :MALZEME, :GRUP;
end
Ama ben değişkenlerin değerlerini NEW den almak istiyorum.
Bildiğim kadarıyla Firebird yeni eklenen kaydı NEW, onun eklenmeden önceki halini de OLD isimli bir tabloda tutuyor.
Yani SQL Servede böyle olduğu için Firebirdde de böyledir diye düşündüm.
SQL Serverda NEW yerine INSERTED OLD yerine DELETED var.
Dolayısıyla NEW isimli tabloyu benim normal bir tabloyu kullanır gibi kullanabilmem gerekmiyor mu ?
Dediğim gibi bu kodun SQL Server versiyonunu kullanmıştım.
@cetoonak DB'ler arası bu tip ayrımlar olabilir, normaldir. Ancak anlamadığım From dan sonraki Tablo ismin sabit değil mi? Niçin yazıp keyfine bakmıyorsun...
Tablo ismim "GIRIS" fakat orda NEW yerine "GIRIS" yazarsam en son tetiklenen kayıt üzerinde işlem yapmam için ayrıca kodlar yazmam gerkemez mi ?.
Ben SQL Server ile Firebird ü karşılaştırmıyorum.
SQL Serverdaki mantığı biliyorum.
Firebirddekini çözmeye çalışıyorum.
Bir örnek üzerinde anlatayım:
Basit stok mantığıyla düşünürsek GIRIS tablosuna kayıt eklendiğinde DEPO tablosundaki ilgili kayıttaki MIKTAR artacak, öyle bir kayıt yoksa da eklenecek.
Kayıt eklenirken DEPO tablosunda diyelim MALZEME, MIKTAR VE GRUP isimli 3 field var.
GIRIS tablosunda MALZEME, MIKTAR var fakat GRUP yok.
O da başka bir tabloda.
Dolayısıyla DEPO tablosuna otomatik olarak kayıt eklenirken MALZEME ve MIKTAR alanlarını NEW den GRUP u da MALZEME_GRUBU tablosundan alması için JOIN yapmamız gerekmiyor mu ?
Yoksa onu ayrı bir işlemde mi yapmalıyım ?
Neyse anladığım kadarıyla Firebirde "FROM NEW" diye bir yapı yok
Ben SQL Serverda bu şekilde kullandığım için burda da öyledir diye düşünmüştüm.
Başka bir şekilde hallettim.
İlgilenen herkese teşekkürler.
cetoonak yazdı:Neyse anladığım kadarıyla Firebirde "FROM NEW" diye bir yapı yok...
Syntax yani yazım farkı muhakkak ki veritabanından veritabanına değişecektir. O yüzden daha önce kullanılan veritabanı yazımına göre yazmadan o veritabanına has yazım formatlarını araştırmakta fayda vardır