Home / MAKALELER / Veri Tabanı / PL/SQL Yazı Dizisi-4

PL/SQL Yazı Dizisi-4

Plsql’e yeni başlayan arkadaşlar için hazırlamış olduğum yazı dizisinin devamını prosedür nedir /nasıl kullanılır ile devam edeceğim.

Prosedür;

Bloklar halinde alt yordamları olan ve veritabanında saklanan bu ifadeler bizim en çok kullandığımız bir yapıdır.Alt alta birçok sql cümleleri veya plsql cümleleri yazsanızda bunları veritabanında saklayamazsınız.Hem bunları birleştirmek hemde plsql’i yeteneklerini arttırmak için bu yapıyı kullanabiliriz.

Şimdi bir prosedurun genel yapısını inceleyelim;

 

 CREATE [ OR REPLACE ] PROCEDURE [ schema. ]procedure
   [ (argument [ { IN | OUT | IN OUT } ]
               [ NOCOPY ]
               datatype [ DEFAULT expr ]
       [, argument [ { IN | OUT | IN OUT } ]
                   [ NOCOPY ]
                   datatype [ DEFAULT expr ]
       ]...
     )
   ]
   [ invoker_rights_clause ]
   { IS | AS }
   { pl/sql_subprogram_body | call_spec } ;

 

OR REPLACE : Var olan bir prosedürümüzü değiştirmek için kullanılır.Örneğin bir prosedür yazdınız ve üzerinde değişiklik yapmak istiyorsunuz.OR REPLACEyazmadıysanız prosedürünüzü tekrar create etmek istediğinizde aynı isimle bir prosedür var diye hata alırsınız.Ama bu ifadeyi yazarsanız bu sorun ortadan kalkacaktır.

Daha sonra prosedür ismini yazıyoruz ve argument’lerini belirtiyoruz.

Not : “[“ parantez ile belirtilen ifadeler kullanma zorunluluğunuz yoktur anlamına geliyor.Bundan dolayı istersek argument leri kullanmayabiliriz.

IN parametresi ;

Prosedürümüze gönderilen değerdir.Biz bir değer oluşturur ve bunu prosedüre göndererek nasıl bir çıktısı olacağını belirleriz.

Şimdi adım adım öğrendiklerimizi deneyelim.Öncelikle ProcDeneme isimli bir tablo oluşturdum ve yazacağım prosedürlerde bu tabloyu ve bu tablodaki verileri kullanacağım.Tablomuz ve verilerimiz şu şekilde;

aaaa

Şimdi ise bu öğrencilerin notlarına, aldığı notun %10 oranında sözlü notu ekleyelim.

aaaa1

 

Yukardaki şekilde gördüğünüz gibi sözlü notunu prosedürümüze biz gönderdik.IN parametresinin tanımında olduğu gibi.Daha sonra update cümleciğini yazdık ve execute ettik ,çalıştırdık.Execute ile başlayan sözdiziminde, hangi oranda güncelleme yapmak istiyorsak not_guncelleme’nin içine o değeri yazıyoruz.

 

 

TYPE;

Yukarda sozlu_not değerini “number” olarak belirledik.İstersek tablomuzu oluşturan kolonların tipinde bir tanımlama ilede yapabilirdik.İşte bunu yapmamızı sağlayan TYPE ifadesidir.Örneğin;

aaaa2

 

TYPE  ile ogrenci_notu kolonun tipi olan “NUMBER” ile sozlu_notu’nun hangi veri tipinde olması gerektiğini söyledik.

 

 

OUT parametresi, prosedürümüz tarafından gönderilen değerdir.Yani prosedürümüz bir değer alıp tekrar bize göndererek dışarda kullanılabilir hale geliyor.

aaaa4

 

 

Yukardaki şekildeki prosedürümüzde 2 tane IN 2 tane OUT kullandık.Daha sonra bunları dbms_output.line ile ekrana yazdırdık.

aaaa5

 

Görüldüğü gibi öğrenc_no’su 874 olan öğrenciye ait kaydın bilgilerini aşağıdaki gibi getirdik.Burda öğrenci adında ‘Yusuf’ kullanmamız birşeyi değiştirmedi çünkü biz prosedürümüzdeki select ifademizde adını değilde öğrenci numarısını kullandık.

aaaa6

IN – OUT parametre,  hem gönderilme hem alma işlemi gerçekleştirilir.Yani siz prosedürünüzün yapmasını istediklerinizi belirttikten sonra ona bir değer gönderirsiniz ve sonrasında ordaki işlemler yapılıp size geri bir değer gönderilir.

Örneğin;

aaaa7

 

Yukardaki şekilde görüldüğü gibi telefon_no’ yu formatlamak istiyoruz.Biz programa bir telefon numarası göndereceğiz o da bize ilk 3 hanesini parantezli en son haneyi de “–“ işareti ile ayrılmış şeklinde verecek.Yani aşağıdaki gibi bir çıktı elde etmiş oluyoruz.

aaaa8

Not:Eğer bunların hiçbirini kullanmazsanız oracle default olarak IN parametresini kullanır.

 

 

 

DEFAULT ve EXECUTE ; Daha önceki örneklerimizde tanımlamış olduğumuz bir değişkene değer atamamıştık.Şimdi ogrenci_ekle isimli prosedürümüz ile çalışma sırasında hiçbir değer yazmasak bile ogrenci adına =’Kerim’ ogrenci notunada ‘50’ yazdığını göreceğiz.Burdaki özel ifadeler “ := ” ve  “ DEFAULT” dır.

Ve sonrasında Execute ediyoruz yani çalıştırıyoruz.Şekildeki gibi ‘DENEME’ ve ‘60’ ifadesini ekledir.Ayrıca size pratiklik kazandıracak  ‘=>’ ifadesi ile belli bir sıra takip etmeksizin değer girebilirsiniz.Yani prosedürümüzde adi,notu şeklinde değer girmemiz gerekiyordu fakat bu ifadeyi kullanarak notu değerini önce ,sonrasında da adı’nı yazdırdık.Fakat görüldüğü gibi tablodaki değerlerimiz doğru yeri bulup kayıtlar girildi.

aaaa9

Bu yazımızda prosedurlerin genel mantığını anlatmaya çalıştım.Bu makalenin devamı olarak prosedür özelliklerine ve exception’lar ile devam edeceğiz.

Faydalı olması dileğiyle.

 

Kaynak;

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6009.htm#SQLRF01309

 

 

About Yusuf Arslan

Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerine Datawarehouse-Database Uzmanı olarak devam etmektedir Sitenin kurucusu ve yazarıdır. yusufarslanbm@gmail.com adresinden bana ulaşabilirsiniz.

İlginizi Çekebilir

SQL Server ile Veri Şifreleme

Bilgi teknolojilerinde verinin güvenliği çok kritik bir öneme sahiptir. Önemli verileri korumak için ekstra bir …

Bir Cevap Yazın