Showing posts with label Oracle. Show all posts
Showing posts with label Oracle. Show all posts

Tuesday, April 19, 2011

Oracle, and case sensitive

Oracle, and case sensitive

Oracle မွာ ilike လိုမ်ိဳး case insensitive ျဖစ္ေအာင္လုပ္တာမပါဘူး။
လြယ္တဲ႔ႏွစ္နည္းရိွပါတယ္။ တစ္ခုက session ကို ေဟာသလို change လုိက္ပါ။

ALTER SESSION SET NLS_COMP=LINGUISTIC; 
ALTER SESSION SET NLS_SORT=BINARY_AI;  

select * from tableName where columName like 'test%';


ဒါဆိုရင္ table ထဲမွာ test နဲ႕ TEST ရိွရင္ ႏွစ္ခုစလံုးျမင္ရပါမယ္။ Test ဆိုတဲ႔ အေသးအၾကီးေရာတာလည္းျမင္ရပါမယ္။ teSt ဆိုတာမ်ိဳးေတြလည္း ျမင္ရပါမယ္။ မဟုတ္ရင္ေတာ႔ test ဆို test ပဲျမင္ရလုိ႕ အေတာ္ၾကီးစိတ္ညစ္ရပါတယ္။

ေနာက္တစ္နည္းကေတာ႔ ေပါက္ကရလုပ္ျပီးေရးၾကတာပါ။ ကြ်န္ေတာ္လည္း ဒီနည္းနဲ႕ပဲေရးလုိက္ပါတယ္။ session change ေနရတာပ်င္းစရာေကာင္းတယ္။

select * from tableName where lower(columName ) like lower('test%');

ရယ္စရာေကာင္းပါတယ္။ data ေတြကို ႏွစ္ခုစလံုး lower case ေျပာင္းလုိက္တာပါ။ upper ဆိုျပီး upper case ေျပာင္းလုိက္ရင္လည္းရပါတယ္။ ဒီ query ေလးနဲ႕ oracle မွာ အၾကီးအေသးျပႆနာကင္းေ၀းႏိုင္ပါတယ္။ ဘာမွေတာ႔မထူးဆန္းဘူး။ တကယ္ရွာၾကည္႕ရရင္ပ်င္းစရာေကာင္းတယ္။ ဒါေလးကိုဖတ္ထားလုိက္တဲ႔သူေတြဟာ အနည္းဆံုး နာရီ၀က္ေလာက္ သက္သာသြားပါလိမ္႔မယ္။

ဒီရံုးမွာေတာ႔ တစ္ေန႕တစ္ေန႕ query ေရးေနတာနဲ႕ပဲအေတာ္ေလးအခ်ိန္ေပးရပါတယ္။ Stroed Proc ေတြ၊ Trigger ေတြ၊ constraints ေတြအေၾကာင္းလည္း ၾကံဳသလိုေရးသြားပါဦးမယ္။

Regards,
Z for Zero

Wednesday, February 23, 2011

decode in oracle.

decode in oracle.

တခါတေလ oracle မွာ decode ဆိုတာကိုေတြ႕ရတတ္တယ္။
အဲဒါကို ရွာၾကည္႕ရမွာပ်င္းတဲ႔သူေတြအတြက္ ၾကိဳဖတ္ထားလုိ႕ရေအာင္ပါ။

SELECT name,
decode(id,'B0001','ID_1,
'B0002','ID_2,
'B0003','ID_3,
'ID_DEFAULT')ID_MASK


FROM customer;

အဲဒါၾကည္႕ရင္ CASE မသံုးခ်င္လုိ႕ အလြယ္လုပ္ထားတာကို ေတြ႕ရပါမယ္။
ဆိုလိုတာက id ကိုၾကည္႕ျပီး B001 ကို ID_1 လို႕ေျပာင္းတာကို ေရးရင္ ရွည္လို႕ လြယ္လြယ္ကူကူ decode function ေလးနဲ႕သပ္သပ္ရပ္ရပ္ေရးလုိက္တာပါပဲ။ ID_MASK က ေတာ႔ alias တစ္ခုေပးလုိက္တာပါပဲ။ ဘာမွမဟုတ္ပါဘူး။

အဲဒါကို IF-THEN-ELSE နဲ႕ေရးရင္ ဒီလိုရပါမယ္
if (id='B0001') then
ID_MASK:='ID_1'
esle if (id='B0002') then
ID_MASK:='ID_2'
else if (id='B0003') then
ID_MASK:='ID_3'
else
ID_MASK:='ID_DEFAULT'
decode ဆိုလို႕ ဘာမ်ားလဲမသိျဖစ္တတ္တာပါ။ အမွန္က ေထြေထြထူးထူးမဟုတ္ပါဘူး။

decode( expression , search , result [, search , result]... [, default] )

အဲဒီလိုမွတ္လုိ႕ရပါတယ္။ NULL ဆိုရင္ 0 ေျပာင္းထည္႕မယ္။ မဟုတ္ရင္ default အတိုင္းျပမယ္ဆိုတာေတြေရးလုိ႕လည္းရပါတယ္။

DECODE(EXTRA_PREMIUM,NULL,0,EXTRA_PREMIUM)

အေပၚက decode မွာဆိုရင္ extra premium field က Null ဆိုရင္ zero လို႕ျပမယ္။ Null မဟုတ္ရင္ သူ႕တန္ဖိုးအတုိင္းျပမယ္။

အလုပ္လုပ္ေနရင္း အသံုးလိုတာေလးေတြ share လိုက္တာပါ။ အေသးအဖြဲေတြေပမယ္႔ သိထားရင္ အသံုး၀င္ႏိုင္ပါတယ္။