2006年11月16日
實戰sqlldr的心得
最近老大交待要把mysql的資料移轉到oracle,想說正好利用sqlldr來處理,沒想到遇到一些問題
os: redhat as 4.0
mysql: 5.0
oracle:10 r2
主要遇到的問題是中文字跟日期的處理,因為由mysql匯出時是big5碼,而我的oracle是走utf8的編碼,所以直接匯入中文字會變亂碼,所以在匯入前先要處理一下
範列如下:
| LOAD DATA CHARACTERSET AL32UTF8 INFILE * truncate INTO TABLE T_TAG FIELDS TERMINATED BY '$' (pkey,status,ttype,word) BEGINDATA 1$5171$5101$敶梯??峄? 2$5172$5101$?屮?鞈殴? 3$5171$5101$?阵??拇? 4$5171$5103$?鲳??? 5$5171$5103$憭扯? 6$5171$5103$?ɒ? 7$5171$5103$撟怠鼠敹? 8$5172$5103$?踹? 9$5171$5103$?鲳?摰? 10$5171$5103$??甇? 11$5171$5103$travel 22$5171$5103$?啣僑敹急? |
設定文字的編碼:CHARACTERSET AL32UTF8
在linux下有一個工具可幫你進行轉碼的動作
| iconv -f big5 -t utf-8 test.ctl > test_utf8.ctl |
下面是我處理時間的範列,很簡單,看一下應該就了解了:
建立修改日期的pl
| create or replace function my_check_date(p_string in varchar2) return varchar2 is begin case WHEN p_string = '0000-00-00 00:00:00' THEN return null; else return p_string; end case; end; |
測試日期
| LOAD DATA INFILE * truncate INTO TABLE TEST_DATE FIELDS TERMINATED BY '$' (id,ttime "to_date(my_test(:ttime),'yyyy-mm-dd hh24:mi:ss')") BEGINDATA 1$2006-10-10 12:10:10 2$2006-10-10 14:10:10 3$0000-00-00 00:00:00 4$2005-11-11 11-11-11 |
結論:只有一句話"事非經過不知難",呵呵
引用URL
http://cgi.blog.roodo.com/trackback/2482751
回應文章 
【全國最大國際名牌LV精品旗艦館】慶開幕
無論紳士、名媛名牌精品皮包、包包、皮夾、皮件、服飾、眼鏡、手錶、領帶..等各大國際名牌應有盡有~
我們連今夏最HOT的消暑商品LV的經典撲克牌也都有喔!!網站內附電子型錄有實際圖片和詳細產品說明,加入會員還享有100點紅利!可零售亦可批發喔(另附輔導創業加盟專案)!!
慶開幕網站全館商品只要專櫃價一折即可擁有~
7~10天到貨~貨到才付款~安全又隱密!!
Monday99!禮拜壹購物網 -【全國最大國際名牌精品旗艦館 - 花花精品世界】 http://buy.okk.to/
無論紳士、名媛名牌精品皮包、包包、皮夾、皮件、服飾、眼鏡、手錶、領帶..等各大國際名牌應有盡有~
我們連今夏最HOT的消暑商品LV的經典撲克牌也都有喔!!網站內附電子型錄有實際圖片和詳細產品說明,加入會員還享有100點紅利!可零售亦可批發喔(另附輔導創業加盟專案)!!
慶開幕網站全館商品只要專櫃價一折即可擁有~
7~10天到貨~貨到才付款~安全又隱密!!
Monday99!禮拜壹購物網 -【全國最大國際名牌精品旗艦館 - 花花精品世界】 http://buy.okk.to/
Posted by 網友
at 2006年11月16日 20:02