Thursday, May 19, 2011

ေအာ္ရီကယ္

ေအာ္ရီကယ္

ဒီေန႕ ရံုးမွာ ေရွ႕ကလူက data ႏွစ္ခုကို column ႏွစ္ခုမခြဲဘဲ ေပါင္းထည္႕သြားတာကို query ျပန္ေရးတဲ႔အခါ ႏွစ္ခုခြဲျပီးျပန္လိုခ်င္တာနဲ႕ delimter တို႕ splitter တို႕အေၾကာင္းကိုေရာက္သြားတယ္။
တစ္ခါတစ္ေလ knowledge transfer လုပ္တာေကာင္းတယ္။ လူမ်ားသိျပီးသားကို ပြားယူလုိက္တယ္။ ေဘးနားက ကတံုးနဲ႕ညီေလးကို ေဟ႔ေကာင္ ငါဒီလိုလိုခ်င္တာေလး ေရးပါဦးဆိုျပီး ေမးလုိက္ေတာ႔ သံုးမိနစ္အၾကာမွာ ေအာက္ပါ script ကိုရတယ္။

SELECT SUBSTR(DEPT, 1, INSTR(DEPT, '|') - 1) AS L_DEPT,

SUBSTR(DEPT, INSTR(DEPT, '|') + 1) AS R_DEPT,

DEPT

FROM INCOME.T_MCS_ENDOR_UPLOAD;


မူလျပႆနာက ဒီလို Dept(Department) Column မွာ Department နဲ႕ Cost Centre values ႏွစ္ခုကို pipe(|) demlimter နဲ႕ၾကံၾကံဖန္ဖန္ထည္႕သြားတယ္။ Department Data ေတြက

356|T&O-SG-Account Services
7185|IBG3-E2-E

စသျဖင္႔ေပါ႔ေလ။ ေရွ႕က Cost Center ။ Pipe ေနာက္က Department ။ အေပၚက query ကိုၾကည္႕ရင္
SUBSTR(DEPT, 1, INSTR(DEPT, '|') - 1) AS L_DEPT

substr Function ကိုသံုးထားတယ္။ Substring ရဲ႕အတုိေကာက္လုပ္ထားတာမွန္းသိသာတယ္။ ဘာကို substring လုပ္မွာလဲဆိုတာကို ၾကည္႕ရင္ အေနာက္မွာ Dept ဆိုတဲ႔ Department column ကိုေတြ႔မယ္။ ဆက္ၾကည္႔ရင္ 1 ကိုေတြ႕မယ္။ 1 က start position ပါ။ Java မွာလို zero ကမစပါဘူး။ ေရွ႕ဆံုးကေကာင္က postion 1. ဟုတ္ျပီ ေရွ႕ဆံုးက ရျပီ။ ဘယ္နားမွာဆံုးမလဲ။ ဒီအတိုင္းေတြးၾကည္႕ pipe ေရွ႕မွာဆံုးမယ္။ pipe ရဲ႕ေရွ႕တစ္ေနရာဆိုေတာ႔ pipe ရဲ႕ေနရာ -1။ pipe ရဲ႕ေနရကို ရွာဖို႕ INSTR function သံုးတယ္။ Department Data ရဲ႕ pipe (|) ရိွတဲ႔ေနရာဆိုေတာ႔ INSTR(DEPT, '|') ဆိုျပီးရွာတယ္။ AS L_DEPT ကေတာ႔ Alias လုပ္တာေပါ႔။ အဲဒီ pipe ရဲ႕ ဘယ္ဘက္ျခမ္းေပါ႔။ တစ္နည္းအားျဖင္႔ as CostCentre ေပါ႔။

ဒုတိယပိုင္းကေတာ႔ပိုလြယ္သြားပါျပီ။ pipe ေနာက္ကေန အဆံုးအထိ။ အဆံုးအထိဆိုရင္ end position မထည္႕ေပးလည္းရပါတယ္။ စတဲ႔ေနရာက pipe ရဲ႕ေနာက္။ pipe ရဲ႕ အေရွ႕ေနရာမွာ တစ္ႏႈတ္ရင္ pipe ရဲ႕ေနာက္တစ္ေနရာ တစ္ေပါင္းလုိက္ရံုပါပဲ။

SUBSTR(DEPT, INSTR(DEPT, '|') + 1) AS R_DEPT

သူမို႕လုိ႕ သံုးမိနစ္နဲ႕ေရးႏိုင္ေပမယ္႔ ကိုယ္႔ဘာသာကိုယ္ရွာေရးရင္ နာရီ၀က္ေလာက္မၾကာရင္ေတာင္ ဆယ္႔ငါးမိနစ္ေလာက္ ၾကာသြားႏုိင္ပါတယ္။ အဲဒီ အခ်ိန္ကို အခုလို ျပန္ေရးဖုိ႕အသံုးခ်လိုက္ပါတယ္။ လုပ္ေဖာ္ကိုင္ဖက္ကေတာ္ရင္ သူ႕ဆီက မ်ားမ်ားေလ႔လာပါ။ အခုေတြ႕ရတာက code ေရးတာမွာ သိပ္မကြာေပမယ္႔ sql skills မွာ ေတာ္ေတာ္ကြာပါတယ္။

တရုတ္ျပည္မွာ sql အလြန္ေရးတဲ႔ development process ရိွပံုရပါတယ္။
သိသြားရင္ ဘာမွမဟုတ္ေပမယ္႔ တစ္ခုခုကို သိလုိက္ရတာဟာ ေက်နပ္ဖုိ႕ေကာင္းပါတယ္။ တကယ္လုိလာမွ ထရွာေနမယ္႔အစား ဖတ္ထားရင္းမွတ္ထားလုိက္မယ္ဆိုရင္ တစ္ခ်ိန္မွာ အသံုး၀င္ႏိုင္ပါတယ္။

ေအာ္ .. စကားစပ္မိလို႕ အဲဒီလို data ႏွစ္ခုကို column တစ္ခုထဲထည္႕ဖုိ႕ ဘယ္ေတာ႔မွ မၾကိဳးစားပါနဲ႕။ အဲဒီလို လုပ္ၾကတဲ႔သူေတြဟာ အပ်င္းထူတာလည္းျဖစ္ရင္ျဖစ္မယ္။ မဟုတ္ရင္လည္း ေဆာ႔ေနတာေနမွာ။ ဘယ္ေနရာမ်ိဳးေတြမွာၾကံဳရတတ္လဲဆိုတာကေတာ႔ အင္မတန္ကို data ေတြမ်ားျပီး column ထပ္တိုးဖို႕မသင္႔ဘူးလုိ႕(ဒါကလည္း ထင္တာေနမွာပါ) ယူဆရတဲ႔ table ေတြမွာ column အသစ္တိုးမယ္ဆိုရင္ DBA နဲ႕ စကားေျပာေနရမယ္ဆုိျပီး ၾကိတ္လုပ္လုိက္ပံုရပါတယ္။

ေအာ္ စင္ကာပူ ေဆာ႔ဖ္၀ဲေလာက ....... သနားစရာ။


Notes:
အလကားေပးေနတဲ႔ JDK ေတြကိုေတာင္ အနည္းဆံုး Java2 (JDK 1.5) ေျပာင္းမသံုးႏုိင္တဲ႔ စင္ကာပူက အူေၾကာင္ေၾကာင္ Architect ေတြရဲ႕ Decision making ကို အံ႔အားသင္႔ပါတယ္။ Backward compatibility အတြက္လည္းမဟုတ္ပါဘူး။ ဘာမွန္းကို မသိတာ။ ပိုဆိုးတာ အစိုးရေဆာ႔ဖ္၀ဲလ္ေတြ။ JDK 1.3။

ဒုတိယ အညံ႔ဆံုး ေဆာ႔ဖ္၀ဲေတြကိုေတာ႔ starhub မွာေရးတယ္ထင္တယ္။ ဘယ္ေနရာမွမဆို error ေလးအေဖြးသားနဲ႕။

2 comments:

Divinity said...

ဟိုက္ သတို႕သားေလာင္းၾကီးက စာေရးသဟ ၊ ငါမေရးလို႕ မေကာင္းေတာ့ဘူး

လာမယ္ဆိုဗ် ရုံးကို

Zero Divided by Zero is Zero (Brahmagupta Rule) said...

ေအး ... ရံုးလာမယ္ဆိုမွ အလုပ္ကမဟားတရားမ်ားေနတာ။ အခုမွ သက္သာရာရတယ္။

Team lead က ကေလးသြားေမြးေနတုန္း ျပႆနာေပါင္းစံုစုျပံဳတက္လာလို႕ ေန႕တုိင္း ၆ နာရီ ခြဲမွ ျပန္ႏိုင္တယ္။ နာရီ၀က္ေတာင္ပိုလုပ္ရတာ အေတာ္ပင္ပန္းတာပဲ။ :)

လာခဲ႔မယ္။ တနလၤာေန႕ half day ယူထားတယ္။ အဂၤါေန႕ ROM သြားမယ္။ leave ယူျပီးျပီ။