PL/SQL 7: Paketler(Packages)

Merhabalar.

Bu yazıda paket(package) mevzusunu anlatmaya çalışacağım.

Paket, içerisinde birden fazla fonksiyon ve SP barındırabilen bir şema nesnesidir. Oracle’ın ifadesiyle:

  • Modülerliği sağlar.
  • Kullanım kolaylığını sağlar.
  • Uygulama dizaynını kolaylaştırır.
  • Performansı artırır. 

Paket 2 kısımdan oluşur.

  • Spec(specification) : Paketteki fonksiyon ve SPlerin bildirimlerinin yapıldığı arayüz kısmıdır.
  • Gövde(body) : Fonksiyon ve prosedürlerinin tanımlamalarının yapıldığı kısımdır.

Şablon:

Spec kısmı:

CREATE [OR REPLACE] PACKAGE paket_adı IS|AS

public tipler ve değişkenler
altprogram spesifikasyonları
END [package_name];

Body kısmı:

CREATE [OR REPLACE] PACKAGE BODY package_name IS|AS
private tipler ve değişkenler
altprogram gövdesi
[BEGIN initialization statements]
END [package_name];

Örnek: Matematik Paketi

Şimdi örnek olarak “matematik” isminde bir paket oluşturuyorum.

İçerisine de 2 fonksiyon 1 tane de prosedür/SP koyuyorum.

Paketin “spec” tanımını yaparken yukarıda belirttiğim üzere fonksiyon ve prosedürlerin sadece bildirimlerini yazıyorum. Yani aldığı parametreleri ve -varsa- dönüş değerini.

Evet, şekil A:


CREATE OR REPLACE PACKAGE matematik
IS

FUNCTION toplama
 (p_sayi1 IN NUMBER, p_sayi2 IN NUMBER)
RETURN NUMBER;

FUNCTION carpma
 (p_sayi1 IN NUMBER, p_sayi2 IN NUMBER)
RETURN NUMBER;

PROCEDURE topla_ve_ekrana_yazdir
 (p_sayi1 IN NUMBER, p_sayi2 IN NUMBER);

END;

Scripti koşturunca aşağıdaki şekilde paket objem oluşuyor:

package1

Şimdi de paketin gövdesini(body) oluşturuyorum:


CREATE OR REPLACE PACKAGE BODY matematik
IS
 PROCEDURE sonucu_ekrana_yazdir (p_sonuc IN NUMBER);

 FUNCTION toplama (p_sayi1 IN NUMBER, p_sayi2 IN NUMBER)
 RETURN NUMBER
 IS
 v_sonuc NUMBER;
 BEGIN
 v_sonuc := p_sayi1 + p_sayi2;

 RETURN v_sonuc;
 END;

FUNCTION carpma (p_sayi1 IN NUMBER, p_sayi2 IN NUMBER)
 RETURN NUMBER
 IS
 v_sonuc NUMBER;
 BEGIN
 v_sonuc := p_sayi1 * p_sayi2;
 RETURN v_sonuc;
 END;

PROCEDURE topla_ve_ekrana_yazdir (p_sayi1 IN NUMBER, p_sayi2 IN NUMBER)
 IS
 v_sonuc NUMBER;
 BEGIN
 v_sonuc := toplama (p_sayi1, p_sayi2);
 sonucu_ekrana_yazdir(v_sonuc);
 END;

 PROCEDURE sonucu_ekrana_yazdir (p_sonuc IN NUMBER)
 IS
 BEGIN
 DBMS_OUTPUT.put_line ('Sonuc : ' || p_sonuc);
 END;
END;

Buradaki sonucu_ekrana_yazdir prosedürü dikkatinizi çekmiş olmalı. Çünkü Paketin spec kısmında tanımlamadık. Sadece “body”de en üstte tanımladık ve burada kullandık.

Tahmin edeceğiniz üzere bu prosedürü “spec”te tanımlamadığımız için private bir prosedür oldu. Dolayısıyla yalnızca bu paketin içinde kullanabileceğiz.

Oluşturduğumuz paketin “body”si de altta.

package2

Paketin herhangi bir elemanını ise aşağıdaki gibi kullabiliriz:


BEGIN
matematik.topla_ve_ekrana_yazdir(3,5);
END;

Sonuç:

package3

Temel manada paket konusu bu şekilde.

Kendinize çook iyi davranın.

 Bu sayfa 10256 kez görüntülendi

It's only fair to share...Share on LinkedInShare on FacebookShare on Google+Tweet about this on TwitterShare on Tumblr
Benzer Konular
  1. merhabalar,
    Sade ve dolu anlatımınızdan dolayı teşekkür ederim.Size bir sorum olacak.
    Paket ile ilgili örneği çalıştırdığımda too many declarations of ‘TOPLAMA’ match this call hatası alıyorum.Bu nasıl çözebilirim.

    • İlginiz için teşekkürler.
      Paketin spec kısmında parametreleri yanlış yazmışım(p_sayi1,p_sayi2 yerine sayi1,sayi2 şeklinde) ve spec tanımı ile body arasında uyumsuzluk oluşmuş.
      Kodları güncelledim. Şu an hatasız çalışması lazım.

Yorum Yap


Not - Bunları KullanabilirsinizHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>