Arşiv

Posts Tagged ‘commit’

pl/sql de rowtype kullanımı ile update işlemi yapmak.


Merhaba,
Daha önceki yazımda pl/sql de rowtype kullanımı hakkında bilgi vermiştim. Önceki yazımda rowtype yapısı ile bir tabloya kayıt ekleme yani insert işleminden bahsetmiştim. Bu bilgilere ilave olarak bir tablodaki verileri güncellemek yani update etmek içinde rowtype yapısını kullanabiliriz. Bu işlemlerin örnekleri için daha önce hazırlamış olduğum tablodan yardım alalım. Bu tablodaki veri ya da verileri hem geleneksel yöntem ile update hem de rowtype yöntemi ile update işlemini yapalım ve aradaki farkı ve kullanım kolaylığını anlayalım.
Öncelikle tablomuzdaki kayıtlara bir göz atalım.

SELECT * FROM rowtype_table;
RT_ID RT_NAME RT_DATE
1 Rowtype kullanılmadan yapılan insert 23.06.2011 08:30:41
2 Rowtype kullanılarak yapılan insert 23.06.2011 08:32:58
3 Rowtype kullanılmadan yapılan update 06.01.2011 11:55:46
4 Rowtype kullanılarak yapılan update 06.01.2011 11:56:30

Tablomuzdaki kayıtlara bir göz attığımıza göre sıra geldi geleneksel update yöntemi ile update işlemi yapmaya.

DECLARE
BEGIN
  UPDATE rowtype_table
     SET rt_id   = 33,
         rt_name = rt_name || ' geleneksel update',
         rt_date = SYSDATE
   WHERE rt_id = 3;
  COMMIT;
END;

Bu update işleminden sonra elde ettiğimiz kayıt aşağıdaki gibi oldu.

RT_ID RT_NAME RT_DATE
1 Rowtype kullanılmadan yapılan insert 23.06.2011 08:30:41
2 Rowtype kullanılarak yapılan insert 23.06.2011 08:32:58
33 Rowtype kullanılmadan yapılan update geleneksel update 06.01.2011 13:05:27
4 Rowtype kullanılarak yapılan update 06.01.2011 11:56:30

Şimdi sırada rowtype ile update işleminde. Bu işlem için kullanabileceğimiz basit bir örnek aşağıdadır.

DECLARE
  rt_table rowtype_table%ROWTYPE;
BEGIN
  rt_table.rt_id   := 44;
  rt_table.rt_name := 'Rowtype kullanılarak yapılan update rowtype update';
  rt_table.rt_date := SYSDATE;

  UPDATE rowtype_table SET ROW = rt_table WHERE rt_id = 4;
  COMMIT;
END;

Rowtype update işlemimizden sonra tablomuzun son hali aşağıdaki gibi olacaktır.

RT_ID RT_NAME RT_DATE
1 Rowtype kullanılmadan yapılan insert 23.06.2011 08:30:41
2 Rowtype kullanılarak yapılan insert 23.06.2011 08:32:58
33 Rowtype kullanılmadan yapılan update geleneksel update 06.01.2011 13:05:27
44 Rowtype kullanılarak yapılan update rowtype update 06.01.2011 13:12:50

Yaptığımız her iki update işleminde sorunsuz olarak istediğimiz verileri değiştirebiliyoruz. Bu durumda geleneksel yöntem yerine rowtype kullanımının bize kazandırdığı kolaylık sorusu aklımıza gelebilir. Bu sorunun cevabı yaptığımız örnekteki tablo gibi az sayıda kolunu olan tabloların update işlemlerinde değil , büyük tablolarda çok fazla sayıda kolon update işlemi yapacağımız zaman kod okunurluğu ve takibi konusunda bize sağladığı kolaylık olacaktır.

Kolay gelsin.

pl/sql rowtype kullanımı örnek


Merhaba,

Pl/sql ortamında yapılan database işlemlerinde (function ,procedure,declare vb.) bazen insert işlemi yapmamız gerekiyor .Yapılacak olan insert işleminde kullanılan tablo sütun sayısı olarak fazla değer içermiyor ise sorun olmuyor fakat çok fazla sütuna sahip tablolara insert işlemi yapılacağı zaman değer atamalarında karışıklıklar yaşanmaktadır.Yaşanan bu karışıklıkları en aza indirmek için rowtype yapısı kullanılabilinir.Rowtype yapısı hem kullanımı kolay , hemde kayıt takibi açısından çok verimlidir.Aşağıda iki insert işlemi yapan declare bulunmaktadır.
Rowtype kullanılmadan yapılan insert işlemi.

DECLARE
  id_rt    NUMBER(12);
  hata_var NUMBER;
BEGIN

  hata_var := 0;

  BEGIN
    SELECT nvl(MAX(rt_id), 0) + 1 INTO id_rt FROM rowtype_table;
  EXCEPTION
    WHEN OTHERS THEN
      id_rt := 1;
  END;

  BEGIN
    INSERT INTO rowtype_table
      (rt_id,
       rt_name,
       rt_date)
    VALUES
      (id_rt,
       'Rowtype kullanılmadan yapılan insert',
       SYSDATE);
  EXCEPTION
    WHEN OTHERS THEN
      hata_var := 1;
      dbms_output.put_line('Insert işleminde hata oldu. !');
  END;

  IF nvl(hata_var, 0) = 0 THEN
    COMMIT;
  ELSE
    ROLLBACK;
  END IF;

END;

Bu insert işleminde kullanılan tablo sütun sayısı olarak fazla değer içermiyor fakat burada en az 40-50 sütün olduğunu düşünürsek bu yapıda kontrol bazen zorlaşıyor.Bu sorunun önüne geçmek için ise aşağıdaki gibi rowtype ile hazırlanan insert gibi insert scriptleri yazarak sorunumuzu giderebiliriz.
Rowtype kullanılarak hazırlanan insert işlemi.

DECLARE
  id_rt    NUMBER(12);
  hata_var NUMBER;
  rt_table rowtype_table%ROWTYPE;
BEGIN

  hata_var := 0;

  BEGIN
    SELECT nvl(MAX(rt_id), 0) + 1 INTO id_rt FROM rowtype_table;
  EXCEPTION
    WHEN OTHERS THEN
      id_rt := 1;
  END;

  rt_table.rt_id   := id_rt;
  rt_table.rt_name := 'Rowtype kullanılarak yapılan insert';
  rt_table.rt_date := SYSDATE;

  BEGIN
    INSERT INTO rowtype_table VALUES rt_table;
  EXCEPTION
    WHEN OTHERS THEN
      hata_var := 1;
      dbms_output.put_line('Insert işleminde hata oldu. !');
  END;

  IF nvl(hata_var, 0) = 0 THEN
    COMMIT;
  ELSE
    ROLLBACK;
  END IF;

END;

Burada kullanılan yapıda da görüleceği gibi rowtype yapısı ile insert işlemi yapacağımız tablonun istediğimiz sütununun değerini yazılan programın istenilen ve en uygun satırlarında müdahale edebiliriz.