PL/SQL Fonksiyonlar ve Saklı Yordamlar (Functions and Stored Procedures)

watch_later 1/16/2016
Saklı Yordamlar (Stored Procedures)
1- Yordam bir kez oluşturulduktan sonra defalarca çağrılabilir. SQL Developer’da saklı yordam üzerinde değişiklik yapabilirsiniz. Bu işleme modülerlik adı verilir.
2- Saklı yordam ilk kez çalıştırıldığında yazım denetimi yapılır ve hız için en iyi seviyeye getirilir. Saklı yordam derlendikten sonra sonraki kullanımlar için hafızada saklanır. Yani her kullanım için yazım denetimi ve hız için en iyi seviyeye getirme ayarı yapılmaz.
3- Ağ trafiğini azaltır. Bir döngü içerisinde yüzlerce satırın her birinde baştan sona işlemler yapılacaksa ağın trafik yoğunluğu artar. Bu durumda döngü işlemleri saklı yordam içerisinde yapılarak ağ trafiği azaltılır.
4- Saklı Yordamı çalıştırabilmek için kullanıcının izne ihtiyacı vardır. İzne sahip değilse doğrudan saklı yordamı çalıştıramazlar.
5- Saklı yordamlar 2100 tane parametreye sahip olabilir.
6- Bir saklı yordamın boyutu 128 MB’ı geçmemelidir.
7- Yordam parametreleri null değeri kabul ederler. Parametreye karşılık gelecek bir değer yoksa parametre null ifade içerir. Bu parametre kullanılarak saklı yordam içerisinde tablo için alan oluşturulacaksa hata döndürür. Bir tablonun alan adı null olamaz. Bu durumdan kurtulmak için oluşturulan parametrelere varsayılan değer verilmelidir.





Saklı Yordam Yapısı
CREATE [OR REPLACE] PROCEDURE procedure_name
    [ (parameter [,parameter]) ]
IS
    [declaration_section]
BEGIN
    executable_section
[EXCEPTION
    exception_section]
END [procedure_name];

Saklı Yordam Örneği
CREATE OR REPLACE PROCEDURE RAISE_AMOUNT 
(
  P_ID IN NUMBER 
, P_RAISE_AMT IN NUMBER DEFAULT 0 
)
AS 
BEGIN
  UPDATE EMPLOYEES
  SET SALARY=SALARY*(1 + P_RAISE_AMT)
  WHERE EMPLOYEE_ID=P_ID;
END RAISE_AMOUNT;


Saklı Yordam Çalıştırma
BEGIN
RAISE_AMOUNT(105,.05);
END;
SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID=105;
--Prosedür silme
DROP PROCEDURE RAISE_AMOUNT;

SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID=105;



Saklı Yordam Silme

DROP PROCEDURE RAISE_AMOUNT;



KULLANICI TANIMLI FONKSİYONLAR

1- Skaler değer döndüren fonksiyonlar

2- Tablo döndüren fonksiyonlar



SCALER DEĞER DÖNDÜREN KULLANICI TANIMLI FONKSİYONLAR:
3 farklı şekilde bağlantı:
1. İşletim sisteminin komut istemcisi
2. Uygulama (SQL Developer vb.)
3. Web tarayıcı

 Fonksiyon Yapısı
CREATE [OR REPLACE] FUNCTION function_name
   [ (parameter [,parameter]) ]

   RETURN return_datatype
IS | AS
   [declaration_section]
BEGIN
   executable_section
[EXCEPTION
   exception_section]
END [function_name];


 Fonksiyon Örneği
CREATE OR REPLACE FUNCTION BANK_KARTNO(_income IN VARCHAR2)
RETURN BOOLEAN 
IS 
 --###-##-#### Banka kartı formatı
 hata EXCEPTION;
 ayrac     CHAR(1);
 part1     NUMBER(3,0);
 part2     NUMBER(2,0);
 part3     NUMBER(4,0);
BEGIN 
  IF LENGTH(_income) <> 11 THEN --Boyutu 11'e eşit değilse hata ver.
    RAISE hata;
  END IF;

  part1 := TO_NUMBER(SUBSTR(_income,1,3),'999'); --3 karakterlik 1. parçası

  ayrac := SUBSTR(_income,4,1); 
  IF ayrac <> '-' THEN -- Ayrac - eşit değilse hata ver
    RAISE hata;
  END IF;

  part2 := TO_NUMBER(SUBSTR(_income,5,2),'99'); --2 karakterlik 2. parçası

  ayrac := SUBSTR(_income,7,1);
  IF ayrac <> '-' THEN -- Yine ayracı kontrol et.
    RAISE hata;
  END IF;

  part3 := TO_NUMBER(SUBSTR(_income,8,4),'9999'); --4 karakterlik 3. parçası

  RETURN TRUE; 
EXCEPTION
  WHEN hata THEN
    RETURN FALSE;
  WHEN OTHERS THEN
    RETURN FALSE;
END BANK_KARTNO;

Fonksiyon Silme
DROP FUNCTION BANK_KARTNO;











Bir sonraki yazımda görüşmek üzere... 



sentiment_satisfied Emoticon