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

30 Kas by Ahmet Duruöz

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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir