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
 
結論:只有一句話"事非經過不知難",呵呵

Posted by my_work at 樂多Roodo! │17:20 │回應(1)引用(0)DB
樂多分類:網路/3C 共同主題:Oracle 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/2482751
回應文章
【全國最大國際名牌LV精品旗艦館】慶開幕
無論紳士、名媛名牌精品皮包、包包、皮夾、皮件、服飾、眼鏡、手錶、領帶..等各大國際名牌應有盡有~
我們連今夏最HOT的消暑商品LV的經典撲克牌也都有喔!!網站內附電子型錄有實際圖片和詳細產品說明,加入會員還享有100點紅利!可零售亦可批發喔(另附輔導創業加盟專案)!!
慶開幕網站全館商品只要專櫃價一折即可擁有~
7~10天到貨~貨到才付款~安全又隱密!!
Monday99!禮拜壹購物網 -【全國最大國際名牌精品旗艦館 - 花花精品世界】 http://buy.okk.to/
Posted by 網友 at 2006年11月16日 20:02