Tag: PL/SQL Başlangıç

PL/SQL CURSOR

Cursor bir küme içinde bulunan verileri işaret eden ve cursor çeşidine göre verileri,sayısını,verinin olup olmadığını vs. bilgileri bize sunan yapılardır.Yani Cursor birden çok veriyi memory de tutup yorumlayabilmemizi sağlar. Nasıl ki değişkenler tek bir adet veriyi tutuyorsa , cursor ‘lerde bir çok veriyi hatta tabloları tutabilen pl/sql yapılarıdır.  PL/SQL ‘de bulunan iki tip cursor yapısı vardır.

  1. Implicit(Örtülü) Cursor
  2. Explicit(Açık) Cursor

Implicit(Örtülü) Cursor

Implicit Cursor  SQL cümlecikleri çalıştırıldığında Oracle tarafından (eğer explicit cursor yoksa) çalıştırılırlar. Programcı bu yapıya müdahale edemediği için implicit cursor(örtülü gösterge) deniliyor. Programcı bu göstergelere müdahale edemez fakat aşağıdaki tablo da açıklamaya çalıştığım fonksiyonlar ile bazı bilgiler edinebilir. Fonksiyonlardan önce aşağıdaki şekli de sizlere kısaca açıklayayım. PL/SQL bloklarının içerisinde diğer yazılarda gördüğünüz gibi SQL cümlelerini de kullanıyoruz.Oracle normalde PL/SQL Engine ile işe başlar fakat eğer arada SQL sorguları var ise SQL Engine ‘e gidip sorguyu çalıştırıp tekrar PL/SQL Engine’e döner. Aslında implicit cursor’lar işte bu geçişlerdeki verileri tutmaya yarar.

PL/SQL CURSOR - PL/SQL Implicit Cursor - PL/SQL Örtülü Cursor

Şimdi bu geçişte tutulan veriler hakkında aşağıdaki fonksiyonlar ile ne kadar bilgi edinebileceğimizi görelim.

Fonksiyon Açıklama
%FOUND Eğer INSERT, UPDATE, ya da  DELETE işlemlerinden bir veya daha fazla satır etkilendiyse TRUE döner veya SELECT INTO işleminden bir veya birden fazla satır etkilendiyse TRUE döner. Bunların dışında FALSE döner.
%NOTFOUND Mantıksal olarak FOUND işleminin tam tersidir.
%ISOPEN Implicit Cursorlar için herzaman FALSE döner çünkü Oracle SQL sorgusu biter bitmez otomatik olarak cursor’ı kapatır.Yani bu fonksiyon cursor kapalı mı değil mi bunu kontrol eder.
%ROWCOUNT INSERT,UPDATE,DELETE işlemlerinden etkilenen satur sayısını ve INSERT INTO işleminde insert edilen kayıt sayısını döndürür.

(continue reading…)

18,583 total views, 2 views today


PL/SQL FONKSİYONLAR(FUNCTIONS)

Prosedürleri öğrenirken fonksiyonlarla ilgili olarak geriye bir değer döndürür demiştik.

Yeri gelmişken internette karşılaştığım prosedür  veya fonksiyonların önemiyle ilgili güzel bir örnek; Bir işlemi birden çok yaptığınızı düşünün. Her seferinde aynı işlemi yapan kodu yazmak oldukça zahmetli olurdu. Fonksiyonlar veya prosedürler, bu soruna yönelik yaratılmıştır. Sadece bir kereye mahsus yapılacak işlem tanımlanır. Ardından dilediğiniz kadar, bu fonksiyonu çağırırsınız. Üstelik fonksiyonların yararı bununla da sınırlı değildir. Fonksiyonlar, modülerlik sağlar. Sayının asallığını test eden bir fonksiyon yazıp, bunun yanlış olduğunu farkederseniz, bütün programı değiştirmeniz gerekmez. Yanlış fonksiyonu düzeltirsiniz ve artık programınız doğru çalışacaktır. Üstelik yazdığınız fonksiyonlara ait kodu, başka programlara taşımanız oldukça basittir.

Bir fonksiyon  aşağıdaki şekilde oluşturulur.

CREATE [OR REPLACE] FUNCTION fonksiyon_adi
[(parametre_adi[IN | OUT | IN OUT] parametre_tipi [, ...])]
RETURN donen_degiskenin_tipi
{IS | AS}
BEGIN
   < fonksiyonun gövdesi>
END [fonksiyon_adi];

(continue reading…)

10,364 total views, no views today


PL/SQL PROSEDÜRLER (PROCEDURES)

Pl/SQL’in bir prosedürel(yordamsal) bir dildir ve zaten ismini de buradan almıştır. Yordamların da alt programlar(subprogram) olduğunu ve bu alt programların bir araya gelerek  daha büyük kodları meydana getirdiğini söyleyebiliriz. Alt programlar bağımsız(standalone) veya bir paket(package) içerisinde oluşturulabilir. Paket konusunu ileride anlatacağım için bağımsız alt programlar ile devam edeceğiz.

Bağımsız alt programlar  CREATE PROCEDURE ve CREATE FUNCTION şeklinde oluşturulabilir ve silmek için ise  DROP PROCEDURE ve DROP FUNCTION  işlemlerini kullanarak yapabiliriz. Fonksiyonlar konusunu ayrıntılı bir şekilde işleyeceğiz fakat yordamları anlamak için fonksiyon tanımı bize yararlı olacak.

Fonksiyon :  Fonksiyonlar parametre alan ve tek bir değer döndüren alt programlardır.

Prosedür  :  Prosedürler parametre alabilen fakat geriye herhangi bir değer döndürmeyen alt programlardır.

NOT : Şunu da söyleyebiliriz: İşlev açısından prosedürler java/c#’taki void metodlara, fonksiyonlar ise değer dönen (string, int, bool vs.) metodlara benzer.

Prosedür oluştururken kullanacağımız yapı aşağıdaki gibidir.

CREATE [OR REPLACE] PROCEDURE yordam_adı
[(parametre_adı [IN | OUT | IN OUT] parametre_tipi [, ...])]
{IS | AS}
BEGIN
  < yordam gövdesi >
END yordam_adı;

(continue reading…)

20,564 total views, 8 views today


PL/SQL DİZİ (ARRAY)

VARRAY aşağıdaki şekildende anlaşılacağı gibi birden fazla aynı tipte degişkeni bir dizi içinde hafızada(memory) ard arda tutan yapıdır(koleksiyon).

Array’ın faydasını anlamak için internette bulduğum bir örneği kullanacak olursak çok daha iyi anlaşılacağını düşünmekteyim; bir bilgisayar programı yaptığınızı düşünün. Kullanıcının 100 değer girmesi isteniyor. Girilen bütün bu sayıların farklı aşamalardan geçeceğini ve bu yüzden hepsini ayrı bir değişkende tutmamız gerektiğini varsayalım. Bu durumda ne yapardınız? a0, a1, a2, …, a99 şeklinde 100 tane değişken tanımlamak elbette mümkün; ama oldukça zahmetli olurdu. Sırf değişkenleri tanımlarken kaybedeceğiniz zamanı düşünürseniz ne demek istediğimi anlarsınız. Bunun için alternatif bir çözümün gerektiği mutlak!

Çok sayıda değişkenin gerektiği durumlarda, diziler imdadımıza yetişir. (Dizi, İngilizce kaynaklarda array olarak geçer.) 100 değişken tanımlamamızın gerektiği yukardaki örneğe dönelim. Tek tek a0, …, a100 yaparak bunu nasıl yazacağınızı zaten biliyorsunuz. Şimdi tek satırda dizi tanımlayarak, bunu nasıl yapacağımızı görelim:

CREATE OR REPLACE TYPE test_array IS VARRAY(100) of number;

PL/SQL DİZİ - PL/SQL ARRAY

Varray aslında bir veri tipidir ve  bunu oluşturmak için aşağıdaki formatı kullanıyoruz.

CREATE OR REPLACE TYPE varray_ismi IS VARRAY(n) of<elementp_tipi>

NOT : PL/SQL bloğunun içinde dizileri(array) aşağıdaki gibide oluşturabiliriz.

TYPE varray_ismi IS VARRAY ( n ) OF < element_tipi >
  • varray_ismi   : varray’e vereceğimiz isimdir.
  • n                    : varray’in maksimum eleman sayısı
  • element_tipi : varray’in içindeki elemanların tipinin ne olacağı.

Örnek;

CREATE OR REPLACE TYPE namearray AS VARRAY (3) OF VARCHAR2 (10);
TYPE namearray IS VARRAY(5) OF VARCHAR2(10);
Type grades IS VARRAY(5) OF INTEGER;
DECLARE
   type namesarray IS VARRAY(5) OF VARCHAR2(10);
   type grades IS VARRAY(5) OF INTEGER;
   names namesarray;
   marks grades;
   total integer;
BEGIN
   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
   marks:= grades(98, 97, 78, 87, 92);
   total := names.count;
   dbms_output.put_line('Total '|| total || ' Students');
   FOR i in 1 .. total LOOP
      dbms_output.put_line('Student: ' || names(i) || 'Marks: ' || marks(i));
   END LOOP;
END;
/

Yukarıdaki örnekte isimlerin tutulduğu namesarray‘i ve isimlere ait notların tutulduğu grades‘imiz var. Görüldüğü gibi oluşturduğumuz değişkenlerin tipini oluşturduğumuz varray tipinde(names ve marks) tanımlıyoruz. Ardından oluşan array’imizin elemanlarını tanımlıyoruz. Ardından da döngüler de öğrendiğimiz  for loop ile array’in eleman sayısı kadar (count ifadesi ilgili arrayin kaç elemandan oluştuğu bilgisini verir) ekrana isimleri ve notları yazdırıyoruz.

Örnek 2;

PL SQL DİZİ - PL SQL ARRAY

DECLARE
   CURSOR c_test_array is
   SELECT  name FROM test_array;
   type c_list is varray (6) of test_array.name%type;
   name_list c_list := c_list();
   counter integer :=0;
BEGIN
   FOR n IN c_test_array LOOP
      counter := counter + 1;
      name_list.extend;
      name_list(counter)  := n.name;
      dbms_output.put_line('Customer('||counter ||'):'||name_list(counter));
   END LOOP;
END;
/

Yukarıda da görüldüğü gibi tablonun name sütununu bir diziye(array) atıyor ve kullanıyoruz.

NOT : yukarıdaki 2 örnektede count ve extend metodunu kullandık bu metodların hepsini koleksiyon(collection) konusunda göreceğiz.

Yararlı olması Dilegiyle …
Yazar : Mustafa Bektaş Tepe

Kaynaklar;
http://www.tutorialspoint.com/plsql/plsql_basic_syntax.htm
https://developersdaily.wordpress.com
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/toc.htm
https://oracle-base.com/articles/misc/introduction-to-plsql

8,644 total views, 2 views today


PL/SQL Döngüler (LOOPS)

Bir veya birden fazla işlem satırını, bir koşula bağlı olarak, belirli sayıda veya bir koşul sağlandığı sürece tekrarlayarak çalıştıran kalıplara döngü adı verilir. Yani aşağıda görünen şekil gibi koşulumuz sağlanıyorsa döngümüz devam edecek sağlanmıyorsa döngü sonlanacaktır.

PL/SQL Döngüler - PL/SQL LOOPS

Döngü Tipi Açıklama
PL/SQL Basic LOOP PL/SQL Temel LOOP yapısında koşulumuz sağlanmadığında loop içinden çıkma komutu ile döngümüzü bitiririz.
PL/SQL While LOOP WHILE LOOP mantığında ise basic loop ile aynı şekilde çalışır fakat burada şart sağlanmadan loop içine giremezsiniz basic loop içerisinde 1 defa girilmiş oluyor.
PL/SQL FOR LOOP FOR LOOP yapısında belirlediğimiz sayıda loop içinde dönebiliriz.
PL/SQL Nested loop İç içe loop kullanımı gerçekleştirebilriz.

(continue reading…)

11,927 total views, 2 views today


PL/SQL Koşullar(Conditions)

Program komutları yazıldığı sırada akar. Ama çoğunlukla, bu akımı yönlendirmek gerekir. Bu iş için denetim yapılarından koşulları kullanabiliriz. Program akışını, belli mantıksal konullara göre istenen yöne saptıran denetim yapılarıdır.

Aşağıda şekil incelediğimizde condition yazan yer çalışmasını istediğimiz kodun çalışması için gereken koşul belirtiliyor eğer bu koşul doğru ise o zaman conditional code içinde sunduğumuz kodumuz çalışıyor ama  koşul yanlış ise bu şekle göre programımız sonlanıyor.

PL/SQL Koşullar - PL/SQL Conditions - PL/SQL if then else

Aşağıdaki çizelge de PL/SQL ‘de bulunan koşullu ifadeler bulumaktadır.

İfade Açıklama
IF-THEN IF- THEN- END IF;
Bu yapı if ‘in ardından belirtilen koşul sağlandığında then’in ardından gelen kod bloğu çalışır ve end if ile blok sonlanır. Zaten if’in ardındaki koşul sağlanmamış ise direk if then end if bloğu biter.
IF-THEN-ELSE IF-THEN-ELSE – END IF;
Bu koşul yapısında ise if koşuluna bir alternatif oluşturuyoruz.Yani eğer ilk koşul yanlış ise ya da null ise else’e git oradaki kodu çalıştır diye komut vermiş oluyoruz. Bu yapı sayesinde koşul sağlansın ya da sağlanmasın sonunda herhangi bir kod ile bir aksiyon alıyoruz.
IF-THEN-ELSEIF IF-THEN-ELSEIF-ELSEIF-ELSE-END IF;
Bu koşul yapısında birden fazla koşul için kodunuzu destekleyebilirsiniz. Örnek vermek gerekirse notu 0 ile 40 arasındakiler için bir işlem 40 ile 60 arasındakiler için farklı bir işlem 60 ile 80 arasındakiler için farklı bir işlem bunların dışındaki şartlar için de başka bir ihtimal gibi uzatabiliriz.
CASE CASE
Bu koşul yapısında bir değişkenin istenilen koşullardeki değerlerine göre kod blokları çalıştırılıyor.
NESTED IF-THEN-ELSE İç içe if’li bloklar oluşturabilirsiniz.

(continue reading…)

5,890 total views, no views today


  • Sertifikasyon



  • Etiketler

  • Topluluklar

                     
                     
  • Live Traffic Feed

    Feedjit Widget
  • Copyright © 1996-2010 Mustafa Bektaş Tepe. All rights reserved.
    Türkçeleştirme Blogizma | AltyapıWordPress
    Takip Et

    Her yeni yazı için posta kutunuza gönderim alın.

    Diğer takipçilere katılın: