Oracle'ın
Ulusal Dil Desteği (National Language
Support-NLS) mimarisi, veri tabanı sorgulamalarında bölgesel
dillere has karşılaşılan problemlere çözümler sağlamakta, tüm veritabansal
işlemleri yaparken anadile, yerel ayarlara adapte olunmasını sağlamaktadır.
İki
yöntemle yerel dile göre sorgu işlemleri yapılabilir.
a)
Aktif session(oturum) için tanımlama
yapılarak;
ALTER
SESSION SET NLS_COMP=LINGUISTIC;
ALTER
SESSION SET NLS_LANGUAGE=’TURKISH’;
ALTER
SESSION SET NLS_SORT='XTURKISH';
ile
sorgulama yapılan aktif sessionda karşılaştırma, uyarı ve sıralama işlemleri
için dili ayarını Türkçe olarak belirlemiş oluruz. NLS_LANGUAGE veritabanının varsayılan
dilini belirtir.
b) Linguistic(Dilbilimsel) olarak herhangi bir
sessionda yapılan sorgulamada, sorgulama anında dinamik olarak dil
parametresi belirtilerek;
NLSSORT ‘un Türkçe
karakterler için kullanımı ve genel argümanları aşağıdaki gibidir.
Kullanımı:
NLSSORT(SUTUN_ADI ,
´NLS_SORT_XTURKISH´)
ile türkçe karakterilerin sorgunun en sonunda (ASC) ya da en
başında (DESC) yer almasını önleyebiliriz.
Söz dizimi:
NLSSORT(char [, 'NLS_SORT
= sort[_ai |_ci]' ])
Argümanlar:
char : Sıralanacak bir text ifadesidir.
Sort : Sorguda, Native Language Support olarak tercih edilen olan dildir.
_ai :
Şive, aksan, vurgu duyarsız sorgulama olduğunu belirtir.
_ci : Harf
duyarsız sorgulama olduğunu belirtir.
Örnek datanın hazırlanması;
CREATE
TABLE PERSON (ID NUMBER NOT NULL,NAME VARCHAR2(25 BYTE) NOT NULL);
INSERT
INTO PERSON(ID,NAME) VALUES(1,'Çağdaş');
INSERT
INTO PERSON(ID,NAME) VALUES(2,'İsmail');
INSERT
INTO PERSON(ID,NAME) VALUES(3,'Şeyma');
INSERT
INTO PERSON(ID,NAME) VALUES(4,'Arif');
INSERT
INTO PERSON(ID,NAME) VALUES(5,'Muhammed');
INSERT
INTO PERSON(ID,NAME) VALUES(6,'Eymen');
Dil ayarı İngilizce iken;
Sorgu:
SELECT
ID,NAME FROM PERSON ORDER BY NAME;
Çıktı:
ID NAME
4 Arif
6 Eymen
5 Muhammed
1 Çağdaş
2 İsmail
3 Şeyma
Dil ayarı Türkçe olarak belirtilerek sorgulandığında;
Sorgu:
Aşağıdaki
üç sorgu şekli de Türkçe karakterlere göre kayıtları sıralama işlemini yapar.
Üç sorgunun da çıktısı aynıdır.
SELECT
ID,NAME FROM PERSON ORDER BY NLSSORT(NAME,'NLS_SORT=TURKISH');
SELECT
ID,NAME FROM PERSON ORDER BY NLSSORT(NAME,'NLS_SORT=XTURKISH') ASC;
SELECT
ID,NAME FROM PERSON ORDER BY NLSSORT(NAME,'NLS_LANG=TR');
Çıktı:
ID NAME
4 Arif
1 Çağdaş
6 Eymen
2 İsmail
5 Muhammed
3 Şeyma
Türkçe karakterleri bozmadan büyük harfe çevirme işlemi için NLS_UPPER
kullanılmalıdır;
Kullanımı :
NLS_UPPER(ALAN_ADI, 'NLS_SORT=XTURKISH')
Örnek:
SELECT
ID, NLS_UPPER(NAME, 'NLS_SORT = XTURKISH') "UPPER_NAME" FROM
PERSON ORDER BY
NLSSORT(NAME,'NLS_SORT=XTURKISH') ASC;
Çıktı:
ID UPPER_NAME
4 ARİF
1 ÇAĞDAŞ
6 EYMEN
2 İSMAİL
5 MUHAMMED
3 ŞEYMA
Türkçe karakterleri bozmadan küçük harfe çevirme işlemi için ise NLS_LOWER kullanılmalıdır;
Kullanımı:
NLS_LOWER(ALAN_ADI, 'NLS_SORT=XTURKISH')
Örnek:
SELECT
ID, NLS_LOWER(NAME, 'NLS_SORT = XTURKISH') "LOWER_NAME" FROM
PERSON ORDER BY
NLSSORT(NAME,'NLS_SORT=XTURKISH') ASC;
Çıktı:
ID LOWER_NAME
4 arif
1 çağdaş
6 eymen
2 ismail
5 muhammed
3 şeyma
Arama opsiyonlarının olduğu sorgulamalarda da
UPPER ve LOWER opsiyonları kullanılabilir;
Örnek:
Türkçe karakterle başlayan yeni bir data ekleyip, iki farklı türde
sorgulama yapıp aynı sonucu alıyoruz;
INSERT INTO PERSON(ID,NAME) VALUES(7,'İhsan');
SELECT ID,NAME FROM PERSON WHERE NLS_UPPER(NAME, 'NLS_SORT = XTURKISH')
like '%İ%' ORDER BY NLSSORT(NAME,'NLS_SORT=BINARY_AI');
SELECT ID,NAME FROM PERSON WHERE NLS_LOWER(NAME, 'NLS_SORT = XTURKISH')
like '%i%' ORDER BY NLSSORT(NAME,'NLS_SORT=BINARY_CI');
Çıktı:
ID NAME
4 Arif
7 İhsan
2 İsmail
Kaynaklar:
Hiç yorum yok :
Yorum Gönder