PLSQL Update Kullanımı  | Oracle Update Komutu

PLSQL Update DML İfadesi Kullanımı

PLSQL Update Kullanımı , “SELECT”,”INSERT”,”MERGE”,”DELETE” gibi bir DML (Data Manupilation Language) ifadesidir. Bu ifade ile Oracle veritabanımızda bulunan tablolardaki bir kolonu veya kolonları kendi verdiğimiz değerler ile güncelleyebiliyoruz.

Oracle Update Syntaxı:

 

UPDATE tablo_ismi
SET kolon_adi1 = ifade1,
    kolon_adi2 = ifade2,
    ...
    kolon_adi_n= ifade_n
[WHERE koşullar];

Şeklindedir. Buradaki “ifade” ler kolonlarımıza vermek istediğimiz yeni değerlerdir.

Kolonları verdiğimiz değerler ile güncelleyen syntaxımızı yukarıdaki gibi belirttik.  Başka bir tablonun verisi ile tablomuzun kolonlarını güncellemek için ise aşağıdaki Oracle Update komutu Syntaxını kullanırız.

UPDATE tablo1
SET kolon1= (SELECT ifade1
               FROM table2
               WHERE koşullar)
[WHERE koşullar];

Şeklinde kolonumuzu başka bir tablonun verisi ile güncelleyebiliyoruz.

Şimdi Oracle Update komutumuz için biraz uygulamalı örnek yapalım. Örneğin; . “calısan_no” eğer “000%” ise yani 3 tane sıfır ile başlayanlar departman yöneticileri olsun. Biz de yönetici olmayan çalışanlarımızın maaşını ve primini değiştirmek isteyelim.

Örneğimiz bu işlemi “calisanlar_tablosu” na uygulayacaktır.

 

UPDATE calisanlar_tablosu
SET calisan_maasi= 1200,
    calisan_primi = 200
WHERE calisan_no not like '000%';

Gördüğünüz gibi 2 kolonun değerini değiştirdik. Bu iki kolonu PLSQL Update komutu ile SET ederken aralarını “,” virgül ile ayırmayı unutmamalıyız.

Şimdi ise tablomuzun verilerini bir başka tablonun verileri ile güncelleme örneği uygulayalım. Hemen hayal gücümüzü çalıştırıyoruz ve bir senaryo ile örneklendiriyoruz 🙂

 

UPDATE musteriler_tablosu
SET musteri_telefonu= (SELECT musteri_cep_tel_no
                 FROM musteri_iletisim_tablosu
                 WHERE musteri_iletisim_tablosu.musteri_adi= musteriler_tablosu.musteri_adi)
WHERE musteri_telefonu is null;

Örneğimizde, Bazı müşterilerimizin “musteri_telefonu” bilgisi “musteriler_tablosu” nda yok. Yani boş, “null”. Ancak musteri_iletisim_tablosu’nda bu bilgiler mevcut.

PLSQL Update Örneğimizdeki Oracle Update komutu ile “musteriler_tablosu” tablomuzun “musteri_telefonu” kolonunu, “musteriler_iletisim_tablosu” tablomuzda bulunan “musteri_cep_tel_no” değeri ile güncelliyoruz.

 

PLSQL UPDATE ile EXISTS Kullanımı

Şimdi bir diğer PLSQL Update Kullanımı ile Oracle Update işleminde yeteneğimizi artıralım. Yukarıdaki örneğimizi anladığımızı düşünerek, yine bu örneğimizi geliştireceğiz.

UPDATE musteriler_tablosu
SET musteri_telefonu= (SELECT musteri_cep_tel_no
                 FROM musteri_iletisim_tablosu
                 WHERE musteri_iletisim_tablosu.musteri_adi= musteriler_tablosu.musteri_adi)
WHERE EXISTS (select musteri_cep_tel_no from musteri_iletisim_tablosu where musteri_cep_tel_no like '0536%')

Önceki senaryomuza ufak bir koşul ekledik aslında. EXISTS , güzel Türkçe’mizde “var olmak”,”içeriğinde bulunmak” anlamını taşır.

Yani buradaki örneğimizde,Update işlemi yalnızca ‘0536%’ ile başlayan cep musteri_cep_tel_no ‘ları için gerçekleşecektir.

Çünkü koşulumuzda gördüğünüz gibi EXISTS ifadesi ile yalnızca ‘0536%’ ile başlayan telefon numaralarını belirttik.

 

Update Hakkında Bilinmesi Gerekenler

Bu başlık birazcık PLSQL Update Kullanımının Kurumsal Oracle Yazılımlarında, örnek vermek gerekirse Oracle veritabanı kullanan “ERP” programlarında nasıl kullanıldığı ile alakalı olacak.

Hemen Oracle veritabanı altyapısı ile çalışan bir ERP (Enterprise Resource Planning)  programı yani Kurumsal Kaynak Planlama programı olan IFS ( Industrial and Financial Systems) ile PL SQL Update işlemine yeni bir bakış açısı ekleyelim.

IFS gibi binlerce tablo bulunan ERP sistemlerinde, bir tabloya bir veri update veya insert etmek, Procedure’ler yardımı ile gerçekleşir.

Aşağıda gerçek bir örnek paylaşacağım. Kod içerisinde çağırılan Check_Insert bir yeni bir çalışan eklemek için gerekli olan kontrolleri içeren proceduredur.

PROCEDURE New___ (
   newrec_ IN OUT NOCOPY employee_tab%ROWTYPE )
IS
   
   PROCEDURE Base (
      newrec_ IN OUT NOCOPY employee_tab%ROWTYPE )
   IS
      objid_         VARCHAR2(20);
      objversion_    VARCHAR2(100);
      attr_          VARCHAR2(32000);
      indrec_        Indicator_Rec;
      emptyrec_      employee_tab%ROWTYPE;
   BEGIN
      indrec_ := Get_Indicator_Rec___(emptyrec_, newrec_);
      Check_Insert___(newrec_, indrec_, attr_);
      Insert___(objid_, objversion_, newrec_, attr_);
   END Base;

BEGIN
   Base(newrec_);
END New___;

 

Çünkü bu Procedure’ler içerisinde kontroller ile update etmek istediğimiz verilerin update edilip edilmemesi gerektiğinin kontrolünü yapar. Örneğin, çalışanın adını girdik ancak soy adı yok. Procedure bunu kontrol eder ve bize kendi içerisinden Exception (Hata) döndürür.

Bir başka sebep olarak, IFS programının arayüzünden bir çalışan kaydı girdiğimizi düşünelim. Bu IFS değil de MFS de olabilir. Program önemli değil.

Biz yalnızca bir kayıt giriyoruz ve çalışan kaydını girdiğimizi düşünerek bu işlemi gerçekleştiriyoruz. Ancak IFS gibi büyük ERP sistemleri veya birçok ilişkisel veritabanı kullanan program, siz bir kayıt girdiğinizde Birden çok tabloya veri yazar. Yani birden çok tabloyaProcedure’ler yardımıylaPLSQL Update komutunu uygulayabilir.

Dolayısı ile biz o Procedure’leri çağırarak PLSQL Update, Insert veya Delete işlemlerini, Procedure’lerin içerisinde yapmalıyız. BUSINESS LOGIC denilen bu kontroller Procedure’ler yardımı ile yani PL SQL yardımı ile Oracle veritabanında kodlanmıştır.

Bu gibi sistemlerde örneğin, çalışanlar tablosuna bir kayıt girdiğimizde, şirketteki kişiler tablosuna da kişi bilgileri otomatik Insert edilir.

Update İşlemini Manuel Olarak Uygulamak

Peki biz meczuplar veri eklemek için yalnızca PLSQL Update kullanarak çalışan eklemek istersek ne olacak?

Çalışan olarak kaydettiğimiz kaydımız, Kişiler tablosuna bu çalışan bilgilerini eklemeyecek. Bu da iç içe girmiş bu büyük ERP programları veritabanları için bir sürü hata ile karşılaşacağımız anlamına gelir. Özetle Update, Insert ve Delete gibi işlemler Bir SQL ifadesi olarak çalıştırılmasının bu gibi sakıncaları vardır.

Yazımızın sonuna geldik. Daha faydalı yazılarda görüşmek dileğiyle 🙂

 

Diğer PLSQL Yazılarım için TIKLAYIN

Oracle PLSQL Update Kullanımı
Oracle PLSQL Update Kullanımı