30 Haziran 2007 Cumartesi

Ayrılmış Sözcükler (Reserved Words)

Bazı sözcükler PL/SQL'de ayrılmış (reserved) oldukları halde SQL'de ayrılmış olmayabilirler. Örneğin CREATE TABLE (tablo yarat) ifadesinde, bir veritabanı kolonunu adlandırmak için, PL/SQL'de ayrılmış bir sözcük olan TYPE 'ın kullanıldığını düşünelim.

Bir SQL ifadesi, programımızdaki bu kolona (TYPE) atıfta bulunursa, bir derleme hatası oluşur; şu komutta olduğu gibi:

SELECT acct, type, bal INTO ... ----> derleme hatası

Ancak kolon adı (TYPE) çift tırnak içine alınırsa bu derleme hatası önlenebilir:

SELECT acct, "TYPE", bal INTO ... ----> hata vermez

Ancak tırnak içinde yazılan kısmın kolon adıyla tamamen aynı olması gerekir; "type" veya "Type" gene derleme hatasına yol açar.

İkinci bir seçenek olarak, sorunlu kolonu yeniden adlandıran bir görüntü (view) oluşturulabilir, sonra da bu görüntü SQL ifadelerindeki temel tablo'nun (base table) yerine kullanılabilir.

29 Haziran 2007 Cuma

Belirleyiciler (Identifiers)

Belirleyiciler PL/SQL program öğe ve birimlerini adlandırmada kullanılır; sabitler, değişkenler, istisnalar, kürsörler, kürsör değişkenleri, altprogramlar ve paketler gibi. Belirleyiciler en fazla 30 karakter uzunluğunda olabilirler.

BEGIN , END , CLOSE , DO , ARRAY , BODY , CURSOR , MAX , MIN gibi ayrılmış sözcükler (reserved words) belirleyici olarak kullanılamazlar.

Belirleyiciler, büyük-küçük harf farkına duyarlı değildir; bundan dolayı lastname, LastName ve LASTNAME'in üçü de aynı belirleyiciyi gösterecektir. Belirleyicilerin adlandırılmasında dolar işareti, numara işareti ve altçizginin kullanımına izin verilmiştir, bundan dolayı şunlar geçerlidir:

X , t2 , phone# , credit_limit , LastName , oracle$number , money$$$tree , SN## , try_again_

Ancak belirleyicilerde kısa çizgi, slash, ampersand ve boşluk kullanımına izin verilmez, bundan dolayı şunlar geçersizdir:

mine&yours , debit-amount , on/off , user id

28 Haziran 2007 Perşembe

Sayıların Bilimsel Gösterimi (Scientific Notation)

Sayıların bilimsel gösteriminde üs anlamına gelen Exponent sözcüğünün baş harfi olan E kullanılır. E, sayının yanına kaç tane sıfır geleceğini gösterir. Örneğin:

2E3 sayısı 2000 anlamına gelir. 3.141E2 ise 314.1 anlamına gelir.
3.1415E0 ise 3.1415 anlamına gelir. -3E2 ise -300 'dür.

E'den sonra bir eksi işareti geliyorsa, eksiden sonraki sayı kadar virgül sola kaydırılır. Örneğin:

4E-2 = 0.04'tür. 6E-4 = 0.0006'dır. -7.5E-2 = -0.075'dir.

PL/SQL'de üslü sayılar 1E-130 ile 10E125 arasında sınırlandırılmıştır. Bundan daha büyük ve daha küçük sayılar derleme hatasına neden olur. Örneğin bir sayıya 10E128 veya 1E-132 atanması derleme hatasına neden olacaktır.

27 Haziran 2007 Çarşamba

%TYPE Niteliği

PL/SQL değişkenlerinin ve kürsörlerinin nitelikleri (attribute) vardır. Bu nitelikler sayesinde bir öğenin tanımını tekrarlamadan o öğenin yapısına ve veritipine atıfta bulunulabilir. Veritabanı kolonları ve tabloları da benzer niteliklere sahiptir, bunlar bakım işlemlerinin kolaylaştırılmasında kullanılabilir. Yüzde işareti (%) niteliği göstermede kullanılır.

%TYPE niteliği bir değişkenin veya bir veritabanı kolonunun veritipini döndürür. Bu özellikle veritabanı değerlerini tutacak değişkenlerin tanımlanmasında kullanışlıdır. Örneğin books adlı bir tablonun title adlı kolonunun tipinde bir değişken tanımlamak için aşağıdaki komut kullanılabilir:

my_title books.title%TYPE;

Bu şekilde yeni oluşturulan my_title değişkeni title kolonunun tipinde olacaktır. İlerde veritabanında title kolonunun tipi değiştirilirse my_title değişkeni de otomatik olarak değişecektir.

26 Haziran 2007 Salı

Kürsörler

Oracle, PL/SQL ifadelerini işlemek ve işlem bilgilerini depolamak için çalışma alanları kullanır. Bir PL/SQL yapısı olan kürsör, bir çalışma alanını isimlendirip orda depolanmış bilgiye ulaşmamızı sağlar. Kürsörler ikiye ayrılır: kendiliğinden ve açıkça belirtilmiş.

PL/SQL, sadece tek bir satır döndüren sorgular da dahil olmak üzere bütün veri işleme ifadeleri için kendiliğinden bir kürsör deklare eder. Tek bir satırdan fazla sonuç döndüren sorgular için, satırları tek tek işlemek için, kendiniz açıkça bir kürsör belirtebilirsiniz.

Çok satırlı bir sorgunun döndürdüğü sonuçlara sonuç kümesi denir; büyüklüğü sorgu kriterine uyan satırların sayısı kadardır. Açıkça belirtilmiş bir kürsör, sonuç kümesindeki hali hazırdaki satıra işaret eder. Böylece her seferinde tek bir satır işlenebilir. Aşağıdaki örnekte c1 adlı kürsör deklare edilmektedir.

DECLARE
CURSOR c1 IS
SELECT empno, ename, job FROM emp WHERE deptno = 20;

Bir kürsörü kontrol etmek için OPEN (aç), FETCH (al) ve CLOSE (kapat) komutları kullanılır. OPEN komutu kürsörle ilişkilendirilmiş sorguyu uygular, sonuç kümesini belirler ve kürsörü ilk satırın başına yerleştirir. FETCH komutu hali hazırdaki satırı alır ve kürsörü bir sonraki satırın başına yerleştirir. Son satır da işlendikten sonra CLOSE komutu kürsörü devre dışı bırakır.

25 Haziran 2007 Pazartesi

Kürsör FOR döngüleri

Bilindiği gibi PL/SQL'de veritabanından bir recordu (kaydı) çağırmak için üç komut gereklidir; bunlar da OPEN (aç), FETCH (al), ve CLOSE (kapat) komutlarıdır, ancak kodunuzu kısaltmak istiyorsanız bu üç komut yerine bir kürsör FOR döngüsü kullanabilirsiniz.

Bir kürsör FOR döngüsü, kendiliğinden döngü indisini, veri tabanından alınmış bir satırı temsil eden bir record (kayıt) olarak deklare eder. Daha sonra bir kürsör açıp, sonuç kümesinin içinden değer satırlarını alıp, recordun (kaydın) alanlarına atar.

Bütün satırlar işlendikten sonra kürsörü kapatır. Aşağıdaki örnekte emp_rec, döngü içinde kendiliğinden bir record olarak deklare edilmiş olmaktadır.

DECLARE
CURSOR c1 IS
SELECT ename, sal, hiredate, deptno FROM emp;
...
BEGIN
FOR emp_rec IN c1 LOOP
...
salary_total := salary_total + emp_rec.sal;
END LOOP;

Bir kaydın ayrı alanlarını kullanmak için nokta kullanılır; emp_rec.sal gibi; emp_rec kaydının sal alanı için.