Veritabanı sorgulamalarının büyük küçük harfe duyarsız şekilde yapılması (case insensitive)

Varsayılan olarak büyük küçük harfe duyarlı (case sensitive) olduğundan aşağıdaki gibi bir sorguda ,  dönen sonuç içerisinde küçük harfe başlayanlar gelmeyecektir. Bu durumda dönen sonuç eksik veri içermiş olacaktır.

select * from kisi where ad like 'A%' ;

Büyük ya da küçük harfle sorgulama yapıldığında hem büyük hem küçük harf içermesi isteniyorsa ,  NLS_COMP=LINGUISTIC ve NLS_SORT=BINARY_AI olacak şekilde değiştirilmelidir.

Tüm kullanıcılar için geçerli olması istenirse , parametre olarak değiştirilebilir. Belirli bazı kullanıcılar için örneğin uygulama kullanıcısı için geçerli olsun denildiğinde , database logon trigger yazılarak bu işlem yapılabilir.

Parametre değişimi :

SQL> alter system set NLS_COMP=LINGUISTIC scope=spfile sid='*';

SQL> alter system set NLS_SORT=BINARY_AI scope=spfile sid='*';

Sonrasında veritabanı yeniden başlatılmalıdır.

Sadece bir kullanıcı için geçerli olsun istenirse , session seviyesinde aşağıdaki gibi logon trigger ile , sadece ilgili kullanıcı giriş yaptığında , session boyunca geçerli hale getirilebilir.

Database logon trigger ile yapılması :

CREATE OR REPLACE TRIGGER SYS.CASE_INSENSITIVE_TRIGGER
AFTER LOGON ON DATABASE
BEGIN
if (sys_context('USERENV', 'SESSION_USER') in ('USER1','USER2')) then
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_COMP=LINGUISTIC';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_SORT=BINARY_AI';
end if;
END case_insensitive_trigger;
/

 

Loading

Leave Your Comment