Başlangıç > Database, Forms, Oracle, PL/SQL, Reports > pl/sql de public,private procedure ve function kullanımı

pl/sql de public,private procedure ve function kullanımı


Merhaba,
Pl/Sql ile geliştirdiğimiz projelerde çoğu zaman procedure, function, type, package vb. sistemler kullanırız. Kullanmış olduğumuz bu yapılar içinde bazen yazdığımız kodları ve scriptleri sadece kendimizin müdahale etmesini isteriz. İşte bu gibi durumlar public ve private yapısı karşımıza çıkıyor.
Hazırlamış olduğumuz bir package içindeki function ya da procedure lerden sadece bizim belirlediğimiz işlemleri diğer kişilerin kullanmasını istiyorsak public ve kendimize özel scriptler yazmak istiyorsak private yapısını kullanabiliriz.
Bu işlemleri daha anlaşılır olarak örneklemek için bir tane package hazırlayalım ve bu package içinde hem private hem de public scriptler hazırlayarak işlemlerimizi kontrol edelim. Burada dikkat etmemiz gereken hususlar öncelikle hazırlayacak olduğumuz package içinde spec kısmına yazacağımız tanımlamalara ait procedure ya da function ların public olarak kullanılacağı ve body kısmında yazacağımız procedure ya da function ların private olarak kullanılacağıdır.
Şimdi paketimizi hazırlayalım ve public, private scriptleri paket üzerinden inceleyelim.

CREATE OR REPLACE PACKAGE public_private_package IS

  -- Author  : SAMETCELIKBICAK
  -- Created : 18.04.2011 16:35:55
  -- Purpose : Public ve Private Package Kullanımı Örneği

  PROCEDURE public_procedure(param1 NUMBER, param2 VARCHAR2);
  FUNCTION public_function(param1 NUMBER, param2 VARCHAR2, param3 NUMBER) RETURN VARCHAR2;

END public_private_package;

Paketimizin spec kısmını hazırladık ve burada belirtmiş olduğumuz procedure ve function public olarak tanımlanır ve bu paketi kullanmak isteyen herkes tarafından erişilebilirler.
Şimdi paketimizin body kısmını hazırlayalım ve burada da private şeklinde procedure ve funtion hazırlayalım ve kullanalım.

CREATE OR REPLACE PACKAGE BODY public_private_package IS

  PROCEDURE private_procedure(param1 NUMBER, param2 VARCHAR2) IS
  BEGIN
    dbms_application_info.set_action('Private Proc., P1=' || param1 || ' , P2=' || param2);
  END;
  ---------------------------------------------------------------------------------------
  FUNCTION private_function(param1 NUMBER, param2 VARCHAR2) RETURN VARCHAR2 IS
  BEGIN
    RETURN('Private Function , Param1=' || param1 || ' , Param2=' || param2);
  END;
  ---------------------------------------------------------------------------------------
  PROCEDURE public_procedure(param1 NUMBER, param2 VARCHAR2) IS
  BEGIN
    dbms_application_info.set_action('Public Proc., P1=' || param1 || ' , P2=' || param2);
  END;
  ---------------------------------------------------------------------------------------
  FUNCTION public_function(param1 NUMBER, param2 VARCHAR2, param3 NUMBER) RETURN VARCHAR2 IS
    private_func VARCHAR2(100);
  BEGIN
    IF nvl(param3, 0) = 0 THEN
      RETURN('Public Function , Param1=' || param1 || ' , Param2=' || param2);
    ELSE
      private_func := private_function(456, 'Private Function,Public Function İçinden Çağırıldı.');
      RETURN(private_func);
    END IF;
  END;
  ---------------------------------------------------------------------------------------
BEGIN
  NULL;
END public_private_package;

Paketimizin body kısmını da hazırladığımıza göre artık örnek kullanımlara geçebiliriz. Örnek olarak public function bilgisini kullanalım.

SELECT public_private_package.public_function(123, 'SAMET', 0) p1,
       public_private_package.public_function(123, 'SAMET', 1) p2
  FROM dual;

Burada iki farklı parametre ile public function kullanımı yaptık ve package body kısmında da görüleceği gibi public function ile private function kullanımını da yaptık.

P1 P2
Public Function , Param1=123 , Param2=SAMET Private Function , Param1=456 , Param2=Private Function,Public Function İçinden Çağırıldı.

Örnek olarak public procedure kullanımı ile de session action bilgisine parametre değerlerimizi atalım.

BEGIN
  public_private_package.public_procedure(789, 'SAMET');
END;

Bu işlemler sonucunda private olan procedure ya da function kullanılmak istenildiğinde ise sistem tarafından hata alınacaktır.
Bu gibi durumlar dikkat etmeniz gereken bir durumda package body kısmında tanımlayacağımız private nesnelerin kod bloğunda ilk önce yazılmasıdır. Bu hem package içinde okunurluğu hem de program içinde kod çalışma hiyerarşisinde düzeni sağlayacaktır.
Bu işlemlerde en sık yaşanan sorun private bir procedure ya da funtion bilgisinin kendisinden önce tanımlanan başka bir procedure ya da function içerisinden çağırılarak çalıştırılmak istenmesidir. Program akış hiyerarşisinde bu daha tanımlanmamış olan bir nesne çağırılmak istenildiği içinde sistem hata verecektir.
Kolay gelsin.

Reklamlar
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: