Hurriyet

13 Kasım 2012 Salı

PL/SQL Ders 13


Hata ve İstisna(Exception) Yönetimi
1   

Hata yönetimi nedir?
            PL/SQL çalışma sırasında gerçekleşecek hataların yönetimini kullanıcılara sağlar. Bunu da “Exception” hata yönetimi kısmında sağlar. Herhangi bir hatayla karşılaşılınca, bu hatanın içeriğiyle ilgili bir mesaj iletilir.

        Hata yönetim yapısı:
            
Genel hata yönetimi

DECLARE
   Tanım kısmı(Declaration section )
 BEGIN
   Hata tanım kısmı(Exception section )
 EXCEPTION
 WHEN excep1 THEN
    -ifadeler
 WHEN excep2 THEN
    -ifadeler
 WHEN Others THEN
   -ifadeler
END; 

PL/SQL Ders 12


Prosedür ve Fonksiyonlardaki Parametreler

Prosedür ve Fonksiyonlara nasıl parametreler aktarılır?

1)In tipindeki parametreler: Bu parametreler prosedürlere değer göndermek için kullanılırlar.

2)Out tipindeki parametreler:  Bu parametreler prosedürlerden değer almak için kullanılırlar. Bunların kullanımı fonksiyonlardaki döndürülecek değişkenlerin kullanımına benzer.

3)In Out parametreleri: Bu parametreler hem değer göndermek için hem de değer almak için kullanılırlar.

1        In parametresi:
CREATE [OR REPLACE] PROCEDURE prosedür_ismi (
 param1 IN veri_tipi, param2 IN veri_tipi )
In ifadesi aslında opsiyoneldir. Zaten otomatik olarak değişkenler aksi belirtilmediği sürece in tipindedirler.

2      Out parametresi:
            CREATE [OR REPLACE] PROCEDURE prosedür_ismi (param OUT veri_tipi)
            Burada parametrenin out olması özellikle önem taşır. Bu prosedürden farklı veriler gönderilcekse bunlar out olarak belirtilmelidir çünkü out otomatik olarak değişkenlere atanmazlar.

3       In Out  Parametresi:

            CREATE [OR REPLACE] PROCEDURE proc3 (param_name IN OUT datatype)

PL/SQL Ders 11


PL/SQL Fonksiyonları

PL/SQL fonksiyonu nedir?

            Fonksiyonlar prosedürlere benziyen PL/SQL bloklarıdır. Prosedürlerden en büyük farkları, fonksiyonların her zaman bir değer döndürmesi gerektiğidir. Buna karşılık prosedür de böyle bir gereklilik yoktur.

Genel yazım şekli:

CREATE [OR REPLACE] FUNCTION fonksiyon_ismi [parametreler]
RETURN dönülcek_veri_tipi; 
IS 
Tanım kısmı(Declaration_section )
BEGIN 
Çalıştırma kısmı(Execution_section )
Return dönülcek_değişken; 
EXCEPTION 
Hata tanımlama kısmı(exception section )
Return dönülcek_değişken; 
END;

Dönülcek_veri_tipi fonksiyonun başlangıcında ifade edilir. Bu tip herhangi bir Oracle tanımlı veri
 tipi olabilir: varchar,number gibi. Çalıştırma ve hata kısımlarının 2’si de bir değişken dönmelidirler.

1> CREATE OR REPLACE FUNCTION calisan_detay_fonk
2>    RETURN VARCHAR(20);
3> IS
5>    emp_name VARCHAR(20);
6> BEGIN
7>        SELECT first_name INTO emp_name
8>        FROM tablo WHERE empID = '100';
9>        RETURN emp_name;
10> END;
11> /

Bu örnekte çalışan id’si 100 olan çalışanın adını ekrana yazdırırız.

PL/SQL fonksiyonu nasıl çalıştırılır?
1)Fonksiyonlar birden fazla şekilde çalışıtırılabilinirler. Bütün fonksiyonlar bir değer döndürdük-
leri için direk olarak bir değişkene atanabilirler.
Calisan_ismi := calisan_detay_fonk;
2)Herhangi bir select ifadesinin bir parçası olarak:
Select calisan_detay_fonk from dual;
3)Bir PL/SQL ifadesi içinde:
Dbms_output.put_line(calisan_detay_fonk);

PL/SQL Ders 10


Saklı Yordam(Stored Procedure) Nedir?

            Saklı yordam olarak nitelediğimiz prosedürler bir ya da birden fazla işlevi yerine getiren bir PL/SQL bloğudur. Bir prosedürün bir başlığı ve  gövde kısmı vardır. Başlık kısmında prosedürün adı ve prosedüre gönderilen parametreler bulunur. Gövde kısmında ise tanım(declaration),çalıştırma(execution) ve hata(exception) kısmı bulunur. Prosedürler diğer PL/SQL bloklarına benzerler. Sadece tekrar kullanım için isimlendirilirler.

Prosedürlere 3 şekilde parametreler aktarılır.

1) In parametreleri

2) Out parametreleri

3) In Out parametreleri

Prosedür bir değer döndürmek zorundaa değildir.

Genel yazım şekli
CREATE [OR REPLACE] PROCEDURE prosedür_adı [parametre listesi]
IS   
   Tanım kısmı(Declaration section)
BEGIN   
   Çalıştırılma kısmı (Execution section)
EXCEPTION   
  Hata tanımlama kısmı (Exception section)
END;

            “IS” prosedürün başlangıç kısmını ifade eder. Herhangi bir PL/SQL bloğundaki “Declare” ifadesine denk düşer. “IS” ve “Begin” ifadesi tanım(Declaration) kısmıdır.

            “Create or Replace” ifadesi ise bir prosedürün yaratılmasını  veya eğer daha önceden yaratıldıysa da onun ezilip üzerine tekrar yazılmasını sağlar.

            Aşağıdaki prosedürde çalışanların detayları adında bir prosedür yaratıyoruz. İlk önce cur1 ve rec1 adında cursor ve kayıt(record) tanımlarımızı yapıyoruz. Sonrasında ise bir döngüye sokarak var olan bütün çalışanların isimlerini ekrana yazdırmış oluruz.



1> CREATE OR REPLACE PROCEDURE calisan_detay
2> IS
3>  CURSOR cur1 IS
4>  SELECT first_name, last_name, salary FROM tablo;
5>  rec1 cur1%rowtype;
6> BEGIN
7>  FOR rec1 in cur1
8>  LOOP
9>  dbms_output.put_line(rec1.first_name);
10> END LOOP;
11>END;
13> /

Saklı Yordam(Stored Procedure)’ler nasıl çalıştırılırlar?

2 şekilde bir prosedür çalıştırılabilinir.

1)      SQL konsolundan
Execute prosedür_ismi veya exec prosedür_ismi

2)   Başka bir prosedür içinden direk prosedür ismini yazarak
Prosedür_ismi;

12 Kasım 2012 Pazartesi

PL/SQL Ders 9



Cursor Nedir?

            Cursor’lar geçici çalışma alanları olarak bir SQL ifadesi çalıştırıldığında oluşturulurlar. Böyle bir cursor içinde select ifadesinin ve içindeki satırlarca veriyi içerir.  Bu alan sayesinde veritabanından kaydedilmiş bilgiler elde edilir. Bir cursor birden fazla satır bilgisini içinde tutabilir ancak her seferinde en fazla bir tane satır inceleyebilir. 2 tip cursor bulunmaktadır.

1)      Implicit (Üstü kapalı-Otomatik) Cursor : Bu cursor tipi, kullanılan bütün DML ifadeleri (select, insert, update, delete)  sırasında oluşturulan en fazla bir tane satır incelememizi sağlamaktadır.

2)      Explicit (Açık –Belirli) Cursor: Bunlar da birden fazla sonuç döndüren select ifadelerinde kullanılmaktadırlar.

Bu 2 cursor tipi aynı işleve sahiptirler ancak erişim biçiminde farklılık gösterirler.


Explicit Cursors
           
            Explicit cursor’lar PL/SQL bloğumuzun tanımlama kısmında yaratılırlar. Genel-
 de bir select ifadesi üzerinden yaratılırlar. Cursor’ımız için belirli bir ad tanımlayabiliriz.

Genel yazım biçimi:

Cursor cursor_adi is select_ifadesi;

·         Cursor_adi herhangi istediğimiz bir ad olabilir.
·         Select_ifadesi ise birden fazla satır sonuç döndüren bir ifade olacaktır.

Explicit Cursor’lar Nasıl Kullanılırlar?

Bu cursor’lar ilk önce tanımlanmalıdırlar.
Sonra cursor’lar açılmalıdır.
1.      Adımda cursor içindeki verilerimiz PL/SQL değişkenlerine aktarılmalıdırlar.
Son olarak da cursor kapatılmalıdır.
Cursor tanımlanmasına örnek olarak:

DECLARE
   CURSOR deneme_cur IS
   SELECT *
   FROM calisanlar
   WHERE maas> 5000;

                       
            Yukarıdaki örnekte çalışanlar tablosundan maaşı 5000’in üzerinde olan tüm 
çalışanları cursor içine atarız. Bir kere tanımladıktan sonra program bloğu içerisinde tekrar 
cursor’ımıza erişebiliriz.


1> DECLARE 
2>    rec1 tablo1%rowtype;
3>    CURSOR  cur1 IS 
4>    SELECT *
5>    FROM 
6>    WHERE maas > 1000; 
7> BEGIN 
8>    OPEN cur1; 
9>    FETCH cur1 INTO rec1; 
10>      dbms_output.put_line (rec1.first_name || '  ' || 
11>rec1.last_name); 
12>  CLOSE emp_cur; 
13> END; 
 
 

                        Yukarıdaki örneğimizde  maaşı 1000’den büyük olan çalışanlar bir cursor’a
 atanır. Sonrasında ise programın ana kısmında  bu cursor açılır ve buradan veri fetch 
edilerek oluşturduğumuz kayıt içine atılır.  Burada da rec1 içindeki eskiden tablo1 içinde 
olan first_name ve last_name kolonları alınır.Sonrasında da elde ettiğimiz verileri yazıp 
cursor’ımızı kapatırız.

PL/SQL Ders 8



PL/SQL’de Tekrarlamalı İfadeler

      Tekrarlamalı kontrol ifadeleri ne zaman birden fazla ifadenin tekrar tekrar çalıştırılması gerektiğinde kullanılır. Bunlar 3 tip döngüden oluşmaktadır.

Bu 3 tip döngü:
Basit döngü –Loop
While döngüsü – While loop
For döngüsü – For loop

1)      Basit döngü:

       Basit döngüler döngü bitmeden önce ifadelerin en az bir kere çalıştırılması gerektiğinde kullanılan döngülerdir. Buralarda bir exit ifadesi belirtilirse sonsuz döngü durumlarından kaçınılmış da olunur.

Basit döngü yazım şekli:
LOOP
   ifadeler;
   EXIT;
   {veya EXIT WHEN şart;}
END LOOP;
Basit bir döngü yazılmadan önce dikkat edilmesi gereken şartlar arasında:

·           Değişkene ilk değerinin döngüye girmeden önce atanması.
·           Döngü değerinin her defasında arttırılması.
·           “Exit” veya “ Exit When” ifadelerinin döngüden çıkmak için kullanılması. Eğer when şartını kullanmadan bir kere exit dersek o zaman döngü içindeki ifadeler sadece bir kere çalıştırılmış olunur.





2)      While Döngüsü:
                        While döngüsü gereken bir şartın sağlandığı sürece çalıştırılması için      kullanılır. Her döngünün başında başta aranan şart tekrar gözden geçirilinir ve yanlış oluncaya kadar devam ettirilir.
Genel yazılış biçimi:
               
WHILE <şart>
 LOOP ifadeler;
END LOOP;

3)      For döngüsü:

Bu döngü bir grup ifadenin belirli sayıda tekrar etmesi istendiği zaman kullanılır.  Artış miktarı hep 1’dir. Döngü son sayıya ulaştığı zaman sonlandırılır.

Genel yazılış biçimi:

FOR sayaç IN val1..val2
  LOOP ifadeler;
END LOOP;
val1 – Başlangıç değeri.
val2 – Sonlanma değeri.