Rastgele Yazılar : Oracle 11g BI ile Harita Üzerinde Rapor Oluşturma(Integ...
Rastgele Yazılar : Oracle Datafile Name ve Path Değiştirme(ARCHIVELOG )
Rastgele Yazılar : Veri Dosyasının Dosya Sisteminden ASM Disk Grubuna RMAN...
Rastgele Yazılar : SQL Nedir, Parse Call ve Plan / Optimizer
Rastgele Yazılar : RAC kurulacak sunucular arası şifresiz SSH bağlantısı
Rastgele Yazılar : Master Data Management(MDM) Nedir?
Rastgele Yazılar : ORACLE - XML 2
Rastgele Yazılar : Neden ORM- Object Relatioanal Mapping- kullanayım ki?
Rastgele Yazılar : Datafile ve Tablespace Kavramları
Rastgele Yazılar : Tekrarlanan Kayıtları Silmek
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 } ]
]...
)
]
[ 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 REPLACE yazmadı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;
Şimdi ise bu öğrencilerin notlarına, aldığı notun %10 oranında sözlü notu ekleyelim.
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;
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.
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.
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.
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;
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.
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.
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