Örnek: Ana Kayıt/Detay Kayıtlar Güncellemesi

Top  Previous  Next

Bir tabloya, diğer bir tablodaki bir kayda bağımlı kayıtlar eklenmesi gerektiğini varsayalım. Örneğin; sipariş edilen ürünlerin kayıtları ve sipariş kaydı. Bir siparişi bütünüyle veritabanına kaydedebilmek için genellikle sipariş tablosuna bir, sipariş detayları tablosuna ise bir ya da daha fazla kayıt eklemek ve bu kayıtları, sipariş tablosuna eklenen kayıt ile ilişkilendirmek gerekir.

siparis (Ana Tablo)

 

NO       MUSTERI_NO   SATICI_NO       SIPARIS_TARIHI

-------- -----------  --------------- ---------------

1        10           3               2003-10-10  

 

 

siparis_detay (Detay Tablosu)

 

NO       SIPARIS_NO   URUN_NO     MIKTAR     BIRIM_FIYAT

-------- -----------  ----------  ---------  ----------

1        1            12          2          20.00

2        1            20          5          30.00

3        1            23          3          15.00     

 

 

siparis.NO ve siparis_detay.SIPARIS_NO alanları üzerinden; bu iki tablo arasında "one-to-many" türünde bir ilişki vardır. Şimdi bu kayıtları, veritabanına bir defada nasıl ekleyebileceğimizi görelim.

Bunun için; her birinin içinde, bir RelDBUpdateProcess elemanı olan iki ayrı işlem bloğuna ihtiyaç var.

 
İşlem Tanımları

Siparis_Tablosuna_Ekleme İşlemi

Güncelleme Sorgusu (SQL):

 

INSERT INTO siparis

    (MUSTERI_NO, SATICI_NO, SIPARIS_TARIHI)

     VALUES(@vof(MUSTERI_NO), @vof(SATICI_NO), '@vof(SIPARIS_TARIHI)');

  selecT @@IDENTITY AS v:SIPARIS_NO//MS SQL Server ve MySQL Veritabanları için
 

SiparisDetay_Tablosuna_Ekleme
İşlemi

Güncelleme Sorgusu (SQL)   : 

  INSERT INTO siparis_detay

    (SIPARIS_NO, URUN_NO, BIRIM_FIYAT, MIKTAR)

    VALUES(@vof(v:SIPARIS_NO), @vof(URUN_NO), @vof(MIKTAR), @vof(BIRIM_FIYAT));

 

 

Birinci işlemin "Güncelleme Sorgusu (SQL)" özelliğinde tanımlanış olan, "INSERT INTO siparis ..." ifadesi ile siparis tablosuna bir kayıt eklenecek ve

"selecT @@IDENTITY AS v:SIPARIS_NO"  ifadesiyle ise, eklenen kaydın numarası SIPARIS_NO adlı havuz değişkenine aktarılacaktır.

Bakınız selecT Sorgusu ile MScript sembollerine veri aktarma

 
SiparisDetay_Tablosuna_Ekleme işleminde belirtilen Güncelleme Sorgusu ise, siparişe dahil olan her bir ürün için, içinde yer alan MScript fonksiyonları çözümlendikten sonra işletilecektir.

Yukarıdaki örnek verileri kullanarak, tüm işletim şu şekilde olacaktır.

 

Siparis_Tablosuna_Ekleme İşlemi

INSERT INTO siparis

 (MUSTERI_NO, SATICI_NO, SIPARIS_TARIHI) VALUES(10, 3, '2003-10-10');

 

selecT @@IDENTITY AS v:SIPARIS_NO;

 

SIPARIS_NO adlı havuz değişkeninin değeri 1 olacaktır.

 

SiparisDetay_Tablosuna_Ekleme İşlemi

1. Ürün

INSERT INTO siparis_detay

 (SIPARIS_NO, URUN_NO, BIRIM_FIYAT, MIKTAR) VALUES(1, 12, 2, 20.00);

 

2. Ürün

INSERT INTO siparis_detay

 (SIPARIS_NO, URUN_NO, BIRIM_FIYAT, MIKTAR) VALUES(1, 20, 5, 30.00);

 

3. Ürün

INSERT INTO siparis_detay

 (SIPARIS_NO, URUN_NO, BIRIM_FIYAT, MIKTAR) VALUES(1, 23, 3, 15.00);

 

Oracle Veritabanı

Oracle veritabanında, eklenen kayıtları otomatik numaralandırma özelliği yoktur. Onun yerine; "sequence" adlı verilen ve otomatik olarak sıra numarası üreten nesneler kullanılır.

Bu nedenle veritabanında, "Sequences" altında her bir tablo için sıra numarası üretecek olan "siparis_sequence" ve "siparis_detay_sequence" adlı iki sıralama nesnesi oluşturulmalıdır.

Şimdi, işlemlerde kullanılan güncelleme sorgularını Oracle veritabanı yeniden düzenleyelim:

Siparis_Tablosuna_Ekleme İşlemi

Güncelleme Sorgusu (SQL):

selecT siparis_sequence.NEXTVAL AS v:SIPARIS_NO FROM DUAL;

INSERT INTO siparis

  (NO, MUSTERI_NO, SATICI_NO, SIPARIS_TARIHI)

   VALUES(@vof(v:SIPARIS_NO), @vof(MUSTERI_NO), @vof(SATICI_NO),

          '@vof(SIPARIS_TARIHI)');
 

SiparisDetay_Tablosuna_Ekleme
İşlemi

Güncelleme Sorgusu (SQL)   : 

INSERT INTO sipariy_detay

  (NO, SIPARIS_NO, URUN_NO, BIRIM_FIYAT, MIKTAR)

  VALUES(siparis_detay_sequence.NEXTVAL, @vof(v:SIPARIS_NO), @vof(URUN_NO),

           @vof(MIKTAR), @vof(BIRIM_FIYAT));