Bu derste öğreneceğimiz konular:
- PL/SQL blok (block) yapısını (structure) açıklamak
- Farklı tipteki PL/SQL bloklarını (block) tanımlamak
- PL/SQL programlama ortamlarını (environment) tanımlamak
- Anonim (Anonymous) PL/SQL bloklarını (block) oluşturmak ve çalıştırmak. (Create and Execute)
- PL/SQL'de çıktı mesajları
PL/SQL Blok Yapısı (PL/SQL Block Structure)
PL/SQL blokları (block) üç bölümden oluşur.
DECLARATIVE (İsteğe Bağlı - Optional) : DECLARE anahtar kelimesi (key word) ile kullanılır. Değişken (variable) tanımlamalarının yapıldığı bölümdür.
Executable (Zorunlu - Mandatory) : BEGIN anahtar kelimesi (key word) ile başlar ve END; anahtar kelimesi (key word) ile sona erer. Bu bölüm içerisisinde birden fazla PL/SQL bloğu (block) kullanılabilir.
Exception Handling (İsteğe Bağlı - Optional) : İstisna (Exception) oluşan durumlarda yapılması gerekenler bu bölümde yapılır. Executable blokları (block) içerisinde yer alır. EXCEPTION anahtar kelimesi (key word) ile kullanılır.
PL/SQL Blok Yapısı Bölümleri (PL/SQL Block Structure Sections)
Declarative (DECLARE) : Değişken tanımlamaları, Sabitleri, Cursorleri,Kullanıcı Tanımlı İstisnaları (User-Defined Exceptions), Yürütmeleri (Executable) ve İstisna Bölümlerni (Exception Sections) içerir. (İsteğe Bağlı - Optional)
Executable (BEGIN ... END;) : Veritabanından (database) veri almak için SQL ifadelerini ve bloktaki verileri işlemek için PL / SQL ifadelerini içerir. En az bir ifade içermelidir. (Mandatory)
Exception (EXCEPTION) : Yürütülebilir bölümde (Executable Section) hatalar ve anormal koşullar oluştuğunda gerçekleştirilecek eylemleri belirtir.(İsteğe Bağlı - Optional)
PL/SQL Compiler
Yüksek seviyeli (High-Level) programlama dillerinde yazılan tüm programlar (C,Java,PL/SQL vb.) çalıştırılmadan önce ikik koda (binary code) çevrilirler. Bu programlar çevrilmesi kontrol edilirken compiler çağrılır. PL / SQL derleyicisi gerektiğinde otomatik olarak yürütülür. Yalnızca her kelimenin doğru yazıldığını değil, aynı zamanda başvurulan herhangi bir veritabanı nesnesinin (tablolar gibi) var olduğunu ve kullanıcının bunlara erişmek için gerekli ayrıcalıklara sahip olduğunu da denetler.
Anonim Bloklar (Anonymous Blocks)
Anonim blokların karakteristikleri :
- İsimsiz bloklardır.
- Veritabanında (database) depolanmaz.
- Bir uygulamanın yürütüldüğü noktada satır içi (inline-block) olarak declare edilir.
- Uygulama her yürütüldüğünde derlenir.
- Çalışma zamanında yürütme için PL / SQL makinesine aktarılır.
- Bir adı olmadığı ve yürütüldükten sonra mevcut olmadığı için çağrılamaz veya çalıştırılamaz.
Örnek Blok Yapısı
[DECLARE]
BEGIN
--statements
[EXCEPTION]
END;
Execution Sections blok örneği :
BEGIN
DBMS_OUTPUT.PUT_LINE('http://selimsilgu.com/');
END;
Declare ile Execution Sections kullanımı örneği :
DECLARE
v_date DATE := SYSDATE;
BEGIN
DBMS_OUTPUT.PUT_LINE('http://selimsilgu.com/' || v_date);
END;
Declare, Execution Section ve Exception Handling kullanımı örneği :
DECLARE
v_name VARCHAR2(40);
v_favorite_number NUMBER;
BEGIN
SELECT
name, favorite_number
INTO v_name, v_favorite_number
FROM Classes
WHERE 1 = 1
AND class_id='CA';
DBMS_OUTPUT.PUT_LINE ('Öğrenci adı : '
|| v_name || ' ve favori sayısı '
|| v_favorite_number || '.') ;
EXCEPTION
WHEN TOO_MANY_ROWS
THEN
DBMS_OUTPUT.PUT_LINE ('Select deyiminiz birden fazla satır aldı. Cursor kullanabilirsiniz...');
END;
Alt Programlar (SubPrograms)
PL/SQL blokları olarak adlandırılır.
Veritabanında depo edilirler.
Uygulamanıza bağlı olarak istediğiniz zaman çağrılabilir.
Prosedür (Procedure) veya Metot (Function) olarak declare edilebilir.
- Procedure : Aksiyon almak için (Actions)
- Function : Hesaplama ve değer geri döndürmek için. (Computes and Return Value)
SYNTAX
PROCEDURE proc_adi
IS
--variable declaration(s)
BEGIN
--statements
[EXCEPTION]
END;
FUNCTION proc_adi
RETURN datatype
-- variable (değişken) tanım(ı/ları)
IS
--variable declaration(s)
BEGIN
--statements (durumlar)
[EXCEPTION]
END;
Procedure Örneği - Bugünün tarihini veren procedure:
CREATE PROCEDURE print_date IS
v_date VARCHAR2(30);
BEGIN
SELECT TO_CHAR(SYSDATE,'Mon DD, YYYY')
INTO v_date
FROM DUAL;
DBMS_OUTPUT.PUT_LINE(v_date);
END;
Function Örneği - Karakter sayısını döndüren function:
CREATE FUNCTION num_characters (p_string IN VARCHAR2)
RETURN INTEGER IS
v_num_characters INTEGER;
BEGIN
SELECT LENGTH(p_string) INTO v_num_characters
FROM DUAL;
RETURN v_num_characters;
END;
PROGRAM YAPISI
Aşağıdaki tabloda, temel PL / SQL bloğunu kullanan çeşitli farklı PL / SQL program yapıları özetlenmektedir.
PL/SQL Programlama Ortamları
PL/SQL programlama dilini kullanabileceğimiz bir çok geliştirme ortamı mevcuttur. Oracle'ın sunduğu geliştirme araçları :
SQL*Workshop : Application Express bileşenidir.
SQL*Plus : Komut satırı uygulamasıdır.
SQL Developer : Grafik tabanlı bir veritabanı uygulamasıdır.
JDeveloper : W'ndows tabanli uygulamadir.
Application Express :Web Browser uygulamasıdır.
Eğer Oracle SQL öğrenmek istiyorsanız Oracle Database'i kurmadan da online olarak kendinizi geliştirebileceğiniz bir Oracle platformu mevcut. Bu platform ücretsizdir. İçerisinde çeşitli veritabanları ve schema'lar bulunuyor. Sorgularınızı kaydedebilir ve sorguladığınız scriptleri görebilirsiniz. Aynı zamanda kendi derslerinizi oluşturabilir ve yazdığınız kodlarınızı paylaşabilirsiniz.
Bunun için Oracle Live SQL linkine girmeli ve üye olmalısınız. OracleLiveSQL
Sağ Üstteki Sign In seçeneğine tıklayın ve Google hesabınızla giriş yapın yada farklı bir hesapla üye olun.
Karşınıza çıkan ilk ekrandan eğitim ve script araması yapabilirsiniz.
View Script and Tutorials ile aratma yaptığımızda aradığımız anahtar kelimeler ile ilgili snuçları görürüz ve yapılan çalışmaları inceleyebiliriz.
İçerisine girdiğimiz Eğitimin sağ üst kısmındaki Run Tutorial butonuna bastığımızda eğitimi kendimiz kodlayarak öğrenebiliriz.
Gelen ekrandan Insert Into Editor seçeneği ile editör ekranına kodu kopyalayabilirsiniz. Daha sonra bu konu çalıştırabilir ve kaydedebilirsiniz.
Action açılır butonunda ise üç seçenek yer alır.
1. View Session : Oturumda sorguladığınız sorguları gösterir.
2. Session : Açılan oturumda yapılan işlemleri temizler.
3. Maximum Row Referance : Büyük sorgu sonuçlarının aşırı yüklenmesini önlemek için maksimum satır sayısını ayarlamanızı sağlar.
Son sorguladığımız PL/SQL bloğu resimde göründüğü gibidir.
Gelen sayfada Save butonuna tıklarsak karşımıza kaydetme seçenekleri çıkacaktır.
Script Name : Kaydedeceğiniz scriptin adı.
Visibilty :
- Private : Sadece size özel kayıt seçeneği.
- Unlisted : Sadece özel olarak paylaştığınız linkler sayesinde ulaşılabilir.
- Public : Herkesin erişimine açık olan.
Description : Açıklama eklnecek alan.
Area : Bu seçenek ile script için kategori seçmiş olursunuz.
Tag : Hangi anahtar kelime ile aratıldığında bulunmasını istiyorsanız o kelimeleri yazmalısınız.
Kaydettikten sonra sol menüden My Scripts sekmesine girdiğinizde bu kaydettiğiniz tüm oturumları görebilirsiniz. Upload Script ile bu bölümden daha önce yazdığınız scriptleri upload edebilirsiniz.
Action butonunda scriptinizi tekrar çalıştırmak için Re-Run seçeneğini seçebilirsiniz.
Eğer Replace Script derseniz kaydetmek seçenekleri tekrar gelecektir ve buradan ayarlarınızı değiştirebilirsiniz. Private kaydetmişseniz ve artık Public yapmak istiyorsanız çalışmanızı bu seçeneği kullanabilirsiniz.
Eğer tüm bu çalışmaları silmek isterseniz Delete Statement seçeneğine tıklayınız.
Çalışmalarınızı indirmek için ise Download seçeneği mevcut.
Sol menüden Schema bölümünü inceleyelim. Burada ilk etapta incelenecek üç alan var. Yeni bir veritabanı objesi create etmek için sağ üstteki yeşil butona tıklayalım. Yani Create Database Object.
Gördüğünüz gibi tablo, view, PL/SQL Procedure, PL/SQL Function, PL/SQL Package, Sequence, Type, Trigger, Index veya Synonym gibi objeler oluşturabilirsiniz.
Örnek olarak biz bir tablo oluşturalım.
Kolonla ilgili tüm ayarlamaları yapabileceğiniz bu ekranda tablo yapısını istediğiniz gibi ayarlayabilirsiniz. Generate SQL diyerek scriptini SQL Worksheet ekranına getirebilirsiniz.
Run dedik ve tablomuzu oluşturduk. Save butonunu kullanarak çalışmayı kaydedelim ve SQL Worksheet bölümünden yeni bir ekran açalım. Sonra da tablomuzu sorgulayalım. Fakat sorgulamadan önce Schema bölümğne gelerek tablomuza göz atalım.
Tablo sekmelerini tek tek inceleyelim.
Table Attributes : Tablo ismi, Durumu, hangi Owner'a ait gibi bilgiler yer alır.
Columns : Bu sekmede Kolon adı, Veri Tipi, Uzunluğu gibi kolon bilgileri yer alır.
Index : Tabloda varsa index bilgisi görüntülenir. Biz tabloya henüz index koymadığımız için 'No indexes defined.' ifadesi yer alacaktır.
Trigger : Tabloyu tetikleyen trigger varsa bu bilgiler yer alır. Bu tabloyu tetikleyen Trigger bulunmadığından 'No triggers defined.' ifadesi yer alır.
Constraint : Tablonun Constraint bilgisini verir. Burada tabloyu oluştururken NAME ve SURNAME alanlarına NOT NULL kısıtı koymuştuk. Bu nedenle iki adet Constraint görünecektir.
Show All seçeneğinde tüm bu özellikler tek sayfada yer alır.
Syntax Help : Bu seçenek seçtiğiniz dilin yapısı ile ilgili örnekler verir.
SQL Syntax örneği :
Action menüsünde ise çeşitli SQL seçenekleri yer alır.
Şimdi tabloyu tam analiz edebilmek için içerisine kayıt ekleyelim. SQL Worksheet sekmesine gelelim.
Tekrar Schema bölümünden tablomuzu aratığ özelliklerine girelim. Action menüsünden Query seçeneği ile tablo sorgusunu WorkSheet'imizde görürüz.
Run butonunu yada CTRL + Enter tuşlarını kullanarak tablo kayıtlarını görebiliriz.
Bu kayıtları .csv formatında indirebilmek için Download CSV yazısını kullanabilirsiniz.
Eğer Add Column seçeneğini kullanırsak alter sorgusu çıkacaktır. Bu sorguda kolon ismini ve veri tipini belirtip kolon ekleyebilirsiniz.
Drop seçeneği tabloyu silme komutunu verir.
Analys : Bu seçim ise tablo özelliklerini gösteren analiz scripti çıkarır.
Son analiz tarihi, Toplam kayıt sayısı, Block sayısı, Boş block sayısı, Ortalama Boşluk gibi bilgiler tabloyu sorgularken belirlenecek yöntem ve performans için önemlidir.
Son olarak SQL DDL ile Create Scripti görüntülenir.
Schema menüsü içindeki Schema combobox seçildiğinde çeşitli schema'lar açılacaktır. Her schema Oracle'ın default kurulu olan kendi veritabanlarını içerir.
Bu schemalar içerisinde çalışmalarınıza yönelik kullanacağınız çeşitli nesneler bulunur.
Örneğin çok sık eğitim için kullanılan HR schemasının nesneleri şunlardır.
İşte Live SQL ortamını da bu şekilde bitirmiş bulunmaktayız.
Umarım sizlere yardımcı olabilmişimdir.
Her türlü sorularınız için çekinmeden mail atabilirsiniz. selimsilgublog@gmail.com
TERMİNOLOJİ
Bu eğitimde kullanılan anahtar kelimeler :
• Anonymous PL/SQL block (Anonim Bloklar)• Compiler• Subprograms (Alt Programlar)• Procedures (Prosedürler)• Functions (Metotlar - Fonksiyonlar)