29 Mayıs 2011 Pazar

PL/SQL Standard Fonksiyonları

PL/SQL de fonksiyonları anlatmadan önce Oracle’daki Dual tablosundan bahsetmede fayda vardır. Sistem tarafından yaratılan bu tabloya veri tabanındaki tüm kullanıcılar erişebilmektedir. Tablo kayıdı tek bir alan olan VARCHAR2(1) veri tipinde DUMMY alanıdır. Bu alan içerisinde ise tek bir satırlık kayıt vardır. Tek bir kayıttan oluşan bu tabloda kullanıcıların SELECT ifadesi içersinde çeşitli özellikleri kullanmalarına olanak tanır.

CONCATE:

Karakter biçimde verilen değerleri ard arda birleştiren fonksiyondur. || şeklinde de kullanılabilir. Bu kullanım birleştirilecek kelimeler arasında boşluk bırakmak içindir. Kullanım şu şekildedir;

birinci_alan || ‘ ‘ || ikinci_alan

SELECT adi||' '||soyadi Ogrenci FROM ogrenciler;

LOWER

Büyük harfle yazılmış karakterleri küçük harflere çevirir.

SELECT LOWER (adi), soyadi FROM ogrenciler;

UPPER

Küçük harfle yazılmış karakterleri büyük harflere dönüştür.

SELECT adi, UPPER (soyadi) FROM ogrenciler;

REPLACE( Karakter, Aranacak_Karakter, Yerleştirilecek_Karakter)

Karekter içerisinde, aranacak karakteri bulur ve yerleşecek karakter ile değiştirir.

SELECT REPLACE ('ist', 'ist', 'istanbul') il FROM DUAL;

SUBSTR(Karakter,m,n)

Karakter içeriside, m sayısı ile başlayan yerden n kadar sayarak bu alan içerisindeki karakterleri alır.

SELECT SUBSTR ('istanbul', 1, 3) FROM DUAL;

LENGHT(Karakter)

Verilen karakterin uzunluğunu sayısal olarak hesaplar.

SELECT SUBSTR ('istanbul') FROM DUAL;

SYSDATE

Sistemin o anki tarih ve saatini verir.

SELECT SYSDATE FROM DUAL;

TO_DATE(Karakter,Format)

Karakter biçinde verilen tarihleri, tarih formatında formatlayarak tarih tipine dönüştür.

SELECT TO_DATE ('12022010', 'DD/MM/YYYY') tarih FROM DUAL;



TO_CHAR

birinci opsiyon

TO_CHAR(Sayı,Format) Sayı biçimde verilen ifadeyi formatlayıp karakter tipine dönüştürür.

SELECT TO_CHAR (1234, '9999') FROM DUAL;


Yukarıdaki sorguda 1234 sayısı 9999 formatında yani 4 basamaklı bir sayı olarak formatlandırılmaktadır.

ikinci opsiyon

TO_CHAR(‘Tarih’,Format)

Tarih biçimde verilen ifadeleri istenen formata dönüştürülmesi yapar.

SELECT TO_CHAR (SYSDATE, 'DD/MM/YY') FROM DUAL;

NEXT_DAY(Tarih, İfade)

Verilmiş olan tarihi referans alarak verilen ifadenin tarihi verir.

SELECT NEXT_DAY (TO_DATE ('18/03/2011', 'DD/MM/YYYY'), 'Friday') "Toplantı" FROM DUAL;

LAST_DAY(Tarih)

Verilen tarihi referans alarak ayın son günü verir.

SELECT LAST_DAY (TO_DATE ('02/05/2011', 'DD/MM/YYYY')) "Ayin Son Günü" FROM DUAL;

TRUNC(Tarih, Format)

Verilen tarihi aşagıdaki formata göre formatlayıp görüntüler.

SELECT TRUNC(SYSDATE,’YYYY’) FROM DUAL;

Yukarıdaki sorgu girilen tarihin yılının ilk gününü verir.

SELECT TRUNC(SYSDATE,’Q’) FROM DUAL;

Yukarıdaki sorgu girilen tarihin yılının ilk çeyereğini verir.

SELECT TRUNC(SYSDATE,’MON’) FROM DUAL;

Yukarıdaki sorgu girilen tarihin ayının ilk gününü verir.

SELECT TRUNC(SYSDATE,’DY’) FROM DUAL;

Yukarıdaki sorgu girilen tarihin ait olduğu haftanın Pazar günün tarihini verir.

SELECT TRUNC(SYSDATE,’W’) FROM DUAL;

Yukarıdaki sorgu girilen tarihin ait olduğu haftanın Perşembe günün tarihini verir.

SELECT TRUNC (SYSDATE, 'YYYY') FROM DUAL;


ROUND(Sayı, n)

Verilen ondalıklı sayıları virgülden sonra n rakamından sonraki kısımı yuvarlamasını yapar.

SELECT ROUND (3.1415926, 5) FROM DUAL;


ADD_MOUNTS(Tarih,n)

Verilen tarihi referans alarak n ay sonraki tarihi verir.

SELECT ADD_MONTHS (TO_DATE ('27-may-2007'), 1) FROM DUAL;

ASCII(Karakter)

Verilen karakter için ASCII kod karşılığını getirir.

SELECT ASCII ('A') FROM DUAL;



CHR(Sayı)

Verilen sayı için ASCII kod karşılığındaki karakteri getirir.

SELECT CHR (65) FROM DUAL;


LTRIM (Karakter, Çıkartılacak_Karakter)

Çıkatılacak karakter belirtilmediği sürece karakterin solundaki boşlukları çıkartır. Çıkartılacak karakter verilirse karakterin sol tarafından başlayarak karakteri çıkatırır.

SELECT LTRIM (' ahmet sedef ') FROM DUAL;

SELECT LTRIM ('****************ahmet sedef ', '*') FROM DUAL;


INSTR (Karakter_Dizisi,Aranacak_Karakter, n,m)

Aranacak karakteri, karakter dizisinde sol taraftan belirtilen n. Karakterden başlayarak m kez bulana kadar arayıp sonucu verir.

SELECT INSTR ('ahmet sedef', 'e') FROM DUAL;

SELECT INSTR ('ahmet sedef', 'e', 1, 2) FROM DUAL;



TRIM (Leading | Trailing | Both form karakter) Eğer leading ile kullanırsa belirtilen karakterde dahil olmak üzere sol tarafa sol taraftaki aynı karakterleri kaldırır. Eğer trailing ile kullanırsa karakterde dahil olmak üzere sağ tarafa doğru sağ taraftaki aynı karakterleri kaldırır. Not: burada belirtilen karakterden sonra hem sol hemde sağ tarafta farklı bir karakter olmamalıdır. Eğer Leading ve Trailing kullanılmayıp, bir karakter belirtilmezse sağ ve sol taraftan boşlukları siler.

SELECT TRIM (LEADING 'f' FROM 'ff00123') FROM DUAL;

SELECT TRIM (TRAILING 'e' FROM 'ff00123ee') FROM DUAL;

SELECT TRIM (BOTH '1' FROM '123Tech111') FROM DUAL;

SELECT TRIM (' tech ') FROM DUAL;



DECODE (İfade, Arama_Kriteri_1,Sonuç_1, Arama_Kriteri2,Sonuç_2,.....,Varsayılan) Bu fonksiyon kullanılırken genelde ifade yerine bir alan referans verilir. Bu alanda yapılacak arama kriteri karşılık sonuçları ayrı bir alana getirir. Klasik programlama dillerinde IF-ELSEIF yapısının PL/SQL karşılığıdır dersek yanılmış olmayız.

SELECT supplier_name, DECODE (supplier_id, 10000, 'IBM',10001, 'Microsoft', 10002, 'Hewlett Packard', 'Gateway') RESULT FROM suppliers;



TO_NUMBER (Karakter, Sayı_Formatı)

Karakter olarak verilen ifadeyi sayıya çevirir.

SELECT TO_NUMBER(‘1247.61’, ‘9999.99’) FROM DUAL;



INITCAP (Karakter)

Karakter olarak verilen ifadeyi ilk harfini büyük karaktere çevirir.

SELECT INITCAP(‘ahmet’) FROM DUAL;


LPAD (Karakter,n,Eklenecek_Karakter)

Karakterin soluna belirtilen karakteri ekler. Toplam uzunluk n kadar olacaktır.

SELECT LPAD(‘25’6,’0’) FROM DUAL;

RTRIM (Karakter,n,m)

Verilan karakteri n. Karakterden başlayarak m adet karakteri alarak ayırır.

SELECT RTRIM(‘ISTANBUL’1,3) FROM DUAL;


CONVERT(Karakter_Dizini, Hedef_Karakter_Seti, Kaynak_Karakter_Seti)

Referans gösterilen karakterleri kaynak karakter seti karşılıklarını alarak hedef karakter setine çevirir.

SELECT CONVERT ('A B C D E Ä Ê Í Õ Ø', 'US7ASCII', 'WE8ISO8859P1') FROM DUAL;

ASCIISTR(Karakter)

Referans gösterilen karakter setini, veritabanın karakter setini kullanarak ASCII karakter setine çevirir.

SELECT ASCIISTR('E Ä') FROM DUAL;

CHR(Sayı)

Verilen sayının ascii karakter seti karşılığını verir.

SELECT CHR(85) FROM DUAL;

DUMP(İfade,Hedef_Format,n,m)

Verilen ifadeyi hedef formatta varchar2 tipinde çevirir. m çevrim yapılacak bit uzunluğudur ve kullanımı opsiyoneldir. m ise referans verilen ifadedeki başlangıç pozisyonunu belirtir ve kullanımı ise opsiyoneldir.

Hedef format tablosu
Value Explanation
8 octal notation
10 decimal notation
16 hexadecimal notation
17 single characters
1008 octal notation with the character set name
1010 decimal notation with the character set name
1016 hexadecimal notation with the character set name
1017 single characters with the character set name
(Not: yukarıdaki tabloyu yazıyı hızlı olarak hazırladığım için türkçeye çevirmedim. Genel bir düzeyde ingilizce ile anlaşılabilicek düzeyde açıklamalardır.)

TRANSLATE(İfade, değişecek_karakterler, yeni_karakterler)

Translate fonksiyonu, referans gösterilen ifadedeki değiştirilecek karakterleri, yeni karakterler ile yer değiştirir.

SELECT TRANSLATE ('DENEME123', '123', '456') FROM DUAL;

COMPOSE(Karakter)

Özel karakterleri almak için kullanılır. Örneğin Türkçe’deki düzeltme işareti gibi. Kullanımı karakter || unicode_karakter şeklindedir.

SELECT COMPOSE ('o' || UNISTR ('308')) FROM DUAL;

En çok kullanılan unistring kodları tablosu
Unistring Value Resulting character
unistr('300') grave accent ( ` )
unistr('301') acute accent ( ´ )
unistr('302') circumflex ( ^ )
unistr('303') tilde ( ~ )
unistr('308') umlaut ( ¨ )
(Not: yukarıdaki tabloyu yazıyı hızlı olarak hazırladığım için türkçeye çevirmedim. Genel bir düzeyde ingilizce ile anlaşılabilicek düzeyde açıklamalardır.)

VSIZE(İfade)

Referans olarak verilen ifadenin kaç byte olduğunu verir. Referans ifade NULL yada ‘’ ise byte olarak yer kaplamayacağı için bir değer geri vermez. Referans ifadeki karakterlerde boşluklarıda dikkate alır.

SELECT VSIZE ('Ahmet Sedef') FROM DUAL;

CURRENT_DATE

SQL Sessionların time zonelarında değişiklikleri takip etmek için kullanılır. ALTER SESSION komutu ile time zone değiştirilen session zamanını verir.

SELECT CURRENT_DATE FROM DUAL;

BIN_TO_FUNCTION(Bit_Vektör)

Bit vektör olarak verilen değeri gerçek değerlerine çevirir. Dikkat edilmesi gereken nokta ise bit vektörün 0 ve 1 lerden oluşan vektör olduğunun unutmamasıdır.

SELECT BIN_TO_NUM(1,0,0) FROM DUAL;

NUMTODSINTERVAL (Sayı, Format)

Verilan sayı istenen formata gün, saat, dakika ve saniye cinsine çevirir. Formatlar ise gün için ‘DAY’, saat için ‘HOUR’, dakika için ‘MINUTE’ ve saniye için ‘SECOND’ dur.

SELECT NUMTODSINTERVAL (15000, 'HOUR') FROM DUAL;

NUMTOYMINTERVAL (Sayı, Format)

Verilan sayıyı ay ve yıla çevirir. Format olarak ay için ‘MONTH’ ve yıl için ‘YEAR’

SELECT NUMTOMYINTERVAL (144, 'MONTH') FROM DUAL;

TO_DSINTERVAL(Karakter_Tarih)

Referans verilen karakteri gün , saat, dakika ve saniye olarak tarihe çevirir. Giriş formatı örneği olarak 1 10:30:00, yani burada 1 gün 10 saat 30 dakikadan bahsediyoruz. Örnek olarak şu anki tarihten 2 gün 3 saat 15 dakika geri gidelim.

SELECT SYSDATE + TO_DSINTERVAL ('-2 03:15:00') FROM DUAL;

Hiç yorum yok:

Yorum Gönder