25 Aralık 2008 Perşembe

Oracle' da Türkçe karakter ile sorgulama

Upper fonksiyonu default olarak i harfini I (büyük ı ) harfine dönüştürüyor.
Doğru çalıştırabilmek için NLS_SORT parametresini XTURKISH olarak set etmek
ve upper yerine nls_upper kullanmak gerekiyor.


SQL> alter session set NLS_SORT = 'XTURKISH' ;

SQL> select nls_upper ( 'i' ) from dual;

--Session bazında set etmeden ve herhangi bir ayar yapmadan sorgulamak için bu şekilde de kullanabiliriz.

SELECT sysdate
FROM dual
WHERE nls_upper ( 'i' , 'NLS_SORT = XTURKISH' ) = 'İ' ;


NLS_SORT parametresi client üzerinde veya yukarıdaki gibi session bazında set edilebilir.
Diğer bir yöntem database için logon trigger oluşturmak olabilir.

--database için örnek trigger

CREATE OR REPLACE TRIGGER NLS_LOGON
AFTER LOGON
ON DATABASE
DECLARE
sqlstr VARCHAR2(200) := 'alter session set NLS_SORT=XTURKISH';
BEGIN
IF (USER = 'DENEMEUSER') THEN
execute immediate sqlstr;
END IF;
END nls_logon;
/

--user için örnek trigger

CREATE OR REPLACE TRIGGER user_logon_nls
AFTER LOGON ON scott.schema
BEGIN
DECLARE
sqlstr VARCHAR2(200) := 'alter session set NLS_SORT=XTURKISH';
BEGIN
IF (USER = 'DENEMEUSER') THEN
execute immediate sqlstr;
END IF;
END;
/

2 yorum:

  1. select nls_upper ( 'i' ) from dual;

    N
    -
    İ

    SQL> update personel set ad = nls_upper(ad), soyad = nls_upper(soyad);

    YanıtlaSil