AltınSoft Makale Arşivi

Web Hosting Hizmetleri

Anasayfa | Toplu SMS | Video | Web Hosting | Makale Ara | Anketler | Sitene Ekle | RSS Kaynağı

Arama


Gelişmiş Arama

Dersler 5

Dersler 5

Kategori  Kategori : Oracle
Yorumlar  Yorum Sayısı : 0
Okunma  Okunma : 371
Tarih  Tarih : 26 Aralık 2007 00:06

PL/SQL Prosedürleri



 

PL/SQL Prosedürleri

Prosedürler belirli işlemleri gerçekleştirmek üzere oluşturulan özel bloklardır. PL/SQL’de prosedürler diğer programlama dillerinden biraz farklı olarak birden fazla değer döndürebilirler.

 

PROCEDURE isim [(parametre[, parametre, ...])] IS

   [yerel tanımlamalar]

BEGIN

                komutlar  

[EXCEPTION

   hata durumları]

END [isim];

 

parametre_adı [IN | OUT [NOCOPY] | IN OUT [NOCOPY]] veritipi

   [{:= | DEFAULT} açıklama]

 

                Bir prosedürün iki kısmı vardır: tanımlama ve gövde. Tanımlama kısmı PROCEDURE kelimesi ile başlar ve prosedür adı ya da parametre listesi ile biter. Parametre tanımlamaları zorunlu değildir. Parametre kullanılmayan prosedürler parantez kullanmadan yazılabilirler.

                Prosedürün gövde kısmı IS anahtar kelimesi ile başlar ve END anahtar kelimesi ile biter. Prosedürün gövdesi de üç kısma ayrılır: değişkenlerin tanımlandığı kısım, komut cümlelerinin yazıldığı kısım ve hata durumlarının kontrol edildiği kısım. Değişken tanımlama kısmı IS kelimesinden hemen sonra başlar. Burada DECLARE kelimesi kullanılmaz. Komut cümlelerinin yazıldığı kısım ise BEGIN anahtar kelimesi ile başlar ve EXCEPTION ya da END ile biter. Bu kısımda en az bir komut yazılmalıdır. Hata durumları kısmı zorunlu değildir. Prosedür END kelimesi ile son bulur. Bu anahtar kelimenin yanına prosedür ismi yazılabilir, zorunlu değildir.

                Aşağıdaki maas_artir prosedürü bir işçinin maaşının verilen miktar kadar artırılmasını sağlar:

 

 

 

PROCEDURE maas_artir (isci_no INTEGER, miktar REAL) IS

   gecerli_ucret REAL;

   ucret_yok EXCEPTION;

BEGIN

   SELECT ucret INTO gecerli_ucret FROM isci

      WHERE iscino = isci_no;

   IF gecerli_ucret IS NULL THEN

      RAISE ucret_yok;

   ELSE

      UPDATE isci SET ucret = ucret + miktar

         WHERE iscino = isci_no;

   END IF;

EXCEPTION

   WHEN NO_DATA_FOUND THEN

      print 'Yanlış İşçi Numarası'

   WHEN ucret_yok THEN

      print 'Geçerli Maaş Miktarı Yok');

END maas_artir;

               

Bu prosedür bir başka blok içerisinden şöyle çağırılabilir:

DECLARE

   isci_no NUMBER;

   miktar REAL;

BEGIN

   ...

   maas_artir(isci_no, miktar);

 

PL/SQL Fonksiyonları

Bir fonksiyon bir değer hesaplayan alt programdır. Fonksiyon ve prosedür yapıları RETURN anahtar kelimesi haricinde benzerdir. Fonksiyonlar şöyle yazılabilirler:

 

FUNCTION isim [(parametre[, parametre, ...])] RETURN veri_tipi IS

   [yerel tanımlamalar]

BEGIN

   Komut cümleleri

[EXCEPTION

   Hata durumları]

END [isim];

 

                Parametre listesi şu düzende verilebilir:

 

parametre_ismi [IN | OUT [NOCOPY] | IN OUT [NOCOPY]] veri_tipi

   [{:= | DEFAULT} açıklama]

 

                Yukarıda prosedürler için anlatılan yapı kısmı fonksiyonlar içinde geçerlidir. Fark olarak burada fonksiyon tek bir değer döndürür ve bu değerin tipi RETURN anahtar kelimesinde sonra yazılır.

                Aşağıdaki fonksiyon bir maaş miktarının istenen dereceye ait olup olmadığını bulur:

               

FUNCTION maas_ok (maas REAL, ucret_derece INTEGER) RETURN BOOLEAN IS

   min_ucret REAL;

   max_ucret REAL;

BEGIN

   SELECT endusuc, enyukuc INTO min_ucret, max_ucret

      FROM ucretoran

      WHERE derece = ucret_derece;

   RETURN (maas >= min_ucret) AND (maas <= max_ucret);

END maas_ok;

 

                Bu fonksiyon bir başka blok içerisinden şöyle çağrılabilir:

 

DECLARE

   yeni_ucret REAL;

   yeni_derece NUMBER(5);

BEGIN

   ...

   IF maas_ok(yeni_ucret, yeni_derece) THEN ...

 

Kayıtlı Alt Programlar

                Bir PL/SQL alt programını Oracle’ın tüm diğer ürünlerinde de kullanmak istiyorsak bu alt programı veritabanına kaydedebiliriz. Alt programları Oracle veritabanına kalıcı olarak kaydetmek için CREATE PROCEDURE ve CREATE FUNCTION komutları kullanılır.

 

 

Parametre Modları

                Yukarıda fonksiyon ve prosedürler anlatılırken bunlara parametreler geçirilebileceği söylenmişti. Bir alt programa parametreler üç farklı modda geçirilebilir. Bunlar IN, OUT, IN OUT olarak adlandırılır. Bu üç mod her alt programda kullanılabilir. Fakat OUT ve IN OUT modlarının fonksiyonlarda kullanılmaması önerilir. Çünkü bir fonksiyonun amacı sıfır, bir  ya da daha çok parametre alıp sonuçta tek bir değer göndermektir.

IN modunda alt programa geçirilen bir parametre bir sabit gibi davranır. Yani alt program içerisinde bu parametrenin değeri alınıp başka bir değişkene aktarılabilir, fakat değiştirilemez. Eğer parametre geçirirken hiçbir mod belirtilmezse, parametreler otomatik olarak IN modunda kabul edilir. IN modunda gönderilen parametre bir sabit, string, değişken ve matematiksel bir işlem olabilir.

OUT modunda gönderilen bir parametre alt program içerisinde bir değişken gibi davranır. Paramterenin değeri alnıbilir ve değiştirilebilir. Bu tip bir parametre mutlaka bir değişken olmalıdır. Yani bir sabit ya da matematiksel bir işlem bu modda gönderilemez. Burada alt programa gönderilen parametrenin değeri, alt programa geçtiği anda NULL değer olur. Bu yüzden alt programa OUT modunda gönderilecek bir parametre tanımlanırken NOT NULL kısıtlamasının getirilmemiş olmasına dikkat edilmelidir. Alt program bittikten sonra, alt program içerisinde değer atanmış olan OUT modu parametreleri bu değerlerini korurlar. Yani girişte NULL değer alıp çıkışta değerlerini korurlar.

IN OUT modunda gönderilen parametreler diğer iki modun yaptığını birleştirirler. Yani bir parametre bir ilk değer ile alt programa girer, alt program içerisinde bu değeri değişebilir ve değerini kaybetmeden alt programdan çıkar. IN OUT modunda gönderilen bir parametre bir değişken olmalıdır, sabit, string ya da matematiksel bir işlem olamaz.

PL/SQL Paketleri

                Oracle’da paket olarak adlandırılan nesneler, birbiriyle ilişkili fonksiyon ve prosedürlerin bir isim altında gruplanmasıyla oluşturulur. PL/SQL paketleri sayesinde daha modüler programlar geliştirilebilir. Birden fazla uygulama tarafından kullanılan bir paket üzerinde değişiklik yapılarak, tüm bu uygulamaların güncellenmesi sağlanabilir. Bir paket içerisindeki bir alt program çağrıldığında, tüm paket belleğe alınır ve bu paketle ilişkili diğer alt programlar bu sayede hızlı çalıştırılabilir.

                Bir paket tanımlama ve gövde kısımlarından oluşur. Tanımlama kısmı bir ara yüz gibidir. Veri tipleri, sabitleri hata durumları, imleçler ve alt programlar burada tanımlanır. Paket gövdesinde ise imleçlerin ve alt programların işlem satırları yer alır.

Aşağıda Oracle yardım dokümanları içerisinde verilmiş bir şema yer almaktadır. Burada anlatılmak istenen “kara kutu” olarak verilen gövde kısmında rahatlıkla değişiklik yapılabileceğidir. Tanımlamalar “specification” kısmında yer aldığına göre gövdede yapılan değişikliklerden uygulama programı etkilenmeyecektir.


 

Bir paket oluşturmak için CREATE PACKAGE komutu kullanılır:

CREATE [OR REPLACE] PACKAGE paket_ismi

  [AUTHID {CURRENT_USER | DEFINER}] {IS | AS}

  [tip_tanımı [tip_tanımı] ...]

  [imleç_tanımı [imleç_tanımı] ...]

  [{altprog_tanımı | çağrı_tanımı}[{altprog_tan | çağrı_tan}]...]

END [paket_ismi];

 

[CREATE [OR REPLACE] PACKAGE BODY paket_ismi {IS | AS}

  [tip_tanımı [tip_tanımı] ...]

  [imleç_gövdesi [imleç_gövdesi] ...]

  [{altprog_tanımı | çağrı_tanımı} [{altprog_tan | çağrı_tan}]...]

[BEGIN

  komut_cümleleri]

END [paket_ismi];]

 

                Tanımlama kısmı genel tanımlamaları içerir ve uygulama programları tarafından görülür. Gövde kısmı ise program kodlarını, ayrıntıları ve özel tanımlamaları içerir. Uygulama programları buraya erişemez. Gövde de değişiklik yapıldığında uygulama programlarının yeniden derlenmesi gerekmez. Burada AUTHID kısmı paketi oluşturan kullanıcın adıdır.

 

CREATE OR REPLACE PACKAGE isci_islem AS  -- tanımlama

   TYPE IsKayTip IS RECORD (isci_no INTEGER, ucret REAL);

   CURSOR ucret_liste RETURN IsKayTip;

   PROCEDURE isci_kayit (

      İscino   NUMBER

      isciadi  VARCHAR2,

      isi      VARCHAR2,

      muduru            NUMBER,

      ucret                NUMBER,

      bolum              NUMBER);

   PROCEDURE isci_sil (isci_no NUMBER);

END isci_islem;

 

CREATE OR REPLACE PACKAGE BODY isci_islem AS  -- gövde

   CURSOR ucret_liste RETURN IsKayTip IS

      SELECT iscino, ucret FROM isci ORDER BY ucret DESC;

   PROCEDURE isci_kayit (

      İscino   NUMBER,

      isciadi  VARCHAR2,

      isi      VARCHAR2,

      muduru   NUMBER,

      ucret    NUMBER,

      bolum    NUMBER) IS

   BEGIN

      INSERT INTO isci VALUES (iscino, isciadi, isi,

         muduru, SYSDATE, ucret, bolum);

   END isci_kayit;

   PROCEDURE isci_sil (isci_no NUMBER) IS

   BEGIN

      DELETE FROM isci WHERE iscino = isci_no;

   END isci_sil;

END isci_islem;

 

 

 

Yazdırılabilir Sayfa Yazdırılabilir Sayfa | Word'e Aktar Word'e Aktar | Tavsiye Et Tavsiye Et | Yorum Yaz Yorum Yaz

Oracle

En Çok Okunan Makaleler

Seçtiklerimiz

Anket

AltınSoft Makale Arşivini beğendinizmi ?




Tüm Anketler

© 2004-2009 Tüm Hakları Saklıdır
RSS Kaynağı

AltınSoft Bilişim Teknolojileri

Altyapı: MyDesign Haber Sistemi