<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-204  評(píng)論-90  文章-8  trackbacks-0
    sqlldr使用小結(jié)(zt)

    sql load的一點(diǎn)小總結(jié)

    sqlldr userid=lgone/tiger control=a.ctl
    LOAD DATA
    INFILE 't.dat' // 要導(dǎo)入的文件
    // INFILE 'tt.date' // 導(dǎo)入多個(gè)文件
    // INFILE * // 要導(dǎo)入的內(nèi)容就在control文件里 下面的BEGINDATA后面就是導(dǎo)入的內(nèi)容

    INTO TABLE table_name // 指定裝入的表
    BADFILE 'c:\bad.txt' // 指定壞文件地址

    ************* 以下是4種裝入表的方式
    APPEND // 原先的表有數(shù)據(jù) 就加在后面
    // INSERT // 裝載空表 如果原先的表有數(shù)據(jù) sqlloader會(huì)停止 默認(rèn)值
    // REPLACE // 原先的表有數(shù)據(jù) 原先的數(shù)據(jù)會(huì)全部刪除
    // TRUNCATE // 指定的內(nèi)容和replace的相同 會(huì)用truncate語(yǔ)句刪除現(xiàn)存數(shù)據(jù)

    ************* 指定的TERMINATED可以在表的開頭 也可在表的內(nèi)部字段部分
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&quot;'
    // 裝載這種數(shù)據(jù): 10,lg,&quot;&quot;&quot;lg&quot;&quot;&quot;,&quot;lg,lg&quot;
    // 在表中結(jié)果: 10 lg &quot;lg&quot; lg,lg
    // TERMINATED BY X '09' // 以十六進(jìn)制格式 '09' 表示的
    // TERMINATED BY WRITESPACE // 裝載這種數(shù)據(jù): 10 lg lg

    TRAILING NULLCOLS ************* 表的字段沒有對(duì)應(yīng)的值時(shí)允許為空

    ************* 下面是表的字段
    (
    col_1 , col_2 ,col_filler FILLER // FILLER 關(guān)鍵字 此列的數(shù)值不會(huì)被裝載
    // 如: lg,lg,not 結(jié)果 lg lg
    )
    // 當(dāng)沒聲明FIELDS TERMINATED BY ',' 時(shí)
    // (
    // col_1 [interger external] TERMINATED BY ',' ,
    // col_2 [date &quot;dd-mon-yyy&quot;] TERMINATED BY ',' ,
    // col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg'
    // )
    // 當(dāng)沒聲明FIELDS TERMINATED BY ','用位置告訴字段裝載數(shù)據(jù)
    // (
    // col_1 position(1:2),
    // col_2 position(3:10),
    // col_3 position(*:16), // 這個(gè)字段的開始位置在前一字段的結(jié)束位置
    // col_4 position(1:16),
    // col_5 position(3:10) char(8) // 指定字段的類型
    // )

    BEGINDATA // 對(duì)應(yīng)開始的 INFILE * 要導(dǎo)入的內(nèi)容就在control文件里
    10,Sql,what
    20,lg,show

    =====================================================================================
    //////////// 注意begindata后的數(shù)值前面不能有空格

    1 ***** 普通裝載
    LOAD DATA
    INFILE *
    INTO TABLE DEPT
    REPLACE
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&quot;'
    (DEPTNO,
    DNAME,
    LOC
    )
    BEGINDATA
    10,Sales,&quot;&quot;&quot;USA&quot;&quot;&quot;
    20,Accounting,&quot;Virginia,USA&quot;
    30,Consulting,Virginia
    40,Finance,Virginia
    50,&quot;Finance&quot;,&quot;&quot;,Virginia // loc 列將為空
    60,&quot;Finance&quot;,,Virginia // loc 列將為空

    2 ***** FIELDS TERMINATED BY WHITESPACE 和 FIELDS TERMINATED BY x'09' 的情況
    LOAD DATA
    INFILE *
    INTO TABLE DEPT
    REPLACE
    FIELDS TERMINATED BY WHITESPACE
    -- FIELDS TERMINATED BY x'09'
    (DEPTNO,
    DNAME,
    LOC
    )
    BEGINDATA
    10 Sales Virginia

    3 ***** 指定不裝載那一列
    LOAD DATA
    INFILE *
    INTO TABLE DEPT
    REPLACE
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&quot;'
    ( DEPTNO,
    FILLER_1 FILLER, // 下面的 &quot;Something Not To Be Loaded&quot; 將不會(huì)被裝載
    DNAME,
    LOC
    )
    BEGINDATA
    20,Something Not To Be Loaded,Accounting,&quot;Virginia,USA&quot;

    4 ***** position的列子
    LOAD DATA
    INFILE *
    INTO TABLE DEPT
    REPLACE
    ( DEPTNO position(1:2),
    DNAME position(*:16), // 這個(gè)字段的開始位置在前一字段的結(jié)束位置
    LOC position(*:29),
    ENTIRE_LINE position(1:29)
    )
    BEGINDATA
    10Accounting Virginia,USA

    5 ***** 使用函數(shù) 日期的一種表達(dá) TRAILING NULLCOLS的使用
    LOAD DATA
    INFILE *
    INTO TABLE DEPT
    REPLACE
    FIELDS TERMINATED BY ','
    TRAILING NULLCOLS // 其實(shí)下面的ENTIRE_LINE在BEGINDATA后面的數(shù)據(jù)中是沒有直接對(duì)應(yīng)
    // 的列的值的 如果第一行改為 10,Sales,Virginia,1/5/2000,, 就不用TRAILING NULLCOLS了
    (DEPTNO,
    DNAME &quot;upper(:dname)&quot;, // 使用函數(shù)
    LOC &quot;upper(:loc)&quot;,
    LAST_UPDATED date 'dd/mm/yyyy', // 日期的一種表達(dá)方式 還有'dd-mon-yyyy' 等
    ENTIRE_LINE &quot;:deptno||:dname||:loc||:last_updated&quot;
    )
    BEGINDATA
    10,Sales,Virginia,1/5/2000
    20,Accounting,Virginia,21/6/1999
    30,Consulting,Virginia,5/1/2000
    40,Finance,Virginia,15/3/2001

    6 ***** 使用自定義的函數(shù) // 解決的時(shí)間問題
    create or replace
    function my_to_date( p_string in varchar2 ) return date
    as
    type fmtArray is table of varchar2(25);

    l_fmts fmtArray := fmtArray( 'dd-mon-yyyy', 'dd-month-yyyy',
    'dd/mm/yyyy',
    'dd/mm/yyyy hh24:mi:ss' );
    l_return date;
    begin
    for i in 1 .. l_fmts.count
    loop
    begin
    l_return := to_date( p_string, l_fmts(i) );
    exception
    when others then null;
    end;
    EXIT when l_return is not null;
    end loop;

    if ( l_return is null )
    then
    l_return :=
    new_time( to_date('01011970','ddmmyyyy') + 1/24/60/60 *
    p_string, 'GMT', 'EST' );
    end if;

    return l_return;
    end;
    /

    LOAD DATA
    INFILE *
    INTO TABLE DEPT
    REPLACE
    FIELDS TERMINATED BY ','
    TRAILING NULLCOLS
    (DEPTNO,
    DNAME &quot;upper(:dname)&quot;,
    LOC &quot;upper(:loc)&quot;,
    LAST_UPDATED &quot;my_to_date( :last_updated )&quot; // 使用自定義的函數(shù)
    )
    BEGINDATA
    10,Sales,Virginia,01-april-2001
    20,Accounting,Virginia,13/04/2001
    30,Consulting,Virginia,14/04/2001 12:02:02
    40,Finance,Virginia,987268297
    50,Finance,Virginia,02-apr-2001
    60,Finance,Virginia,Not a date

    7 ***** 合并多行記錄為一行記錄
    LOAD DATA
    INFILE *
    concatenate 3 // 通過(guò)關(guān)鍵字concatenate 把幾行的記錄看成一行記錄
    INTO TABLE DEPT
    replace
    FIELDS TERMINATED BY ','
    (DEPTNO,
    DNAME &quot;upper(:dname)&quot;,
    LOC &quot;upper(:loc)&quot;,
    LAST_UPDATED date 'dd/mm/yyyy'
    )
    BEGINDATA
    10,Sales, // 其實(shí)這3行看成一行 10,Sales,Virginia,1/5/2000
    Virginia,
    1/5/2000
    // 這列子用 continueif list=&quot;,&quot; 也可以
    告訴sqlldr在每行的末尾找逗號(hào) 找到逗號(hào)就把下一行附加到上一行

    LOAD DATA
    INFILE *
    continueif this(1:1) = '-' // 找每行的開始是否有連接字符 - 有就把下一行連接為一行
    // 如 -10,Sales,Virginia,
    // 1/5/2000 就是一行 10,Sales,Virginia,1/5/2000
    // 其中1:1 表示從第一行開始 并在第一行結(jié)束 還有continueif next 但continueif list最理想
    INTO TABLE DEPT
    replace
    FIELDS TERMINATED BY ','
    (DEPTNO,
    DNAME &quot;upper(:dname)&quot;,
    LOC &quot;upper(:loc)&quot;,
    LAST_UPDATED date 'dd/mm/yyyy'
    )
    BEGINDATA // 但是好象不能象右面的那樣使用
    -10,Sales,Virginia, -10,Sales,Virginia,
    1/5/2000 1/5/2000
    -40, 40,Finance,Virginia,13/04/2001
    Finance,Virginia,13/04/2001

    8 ***** 載入每行的行號(hào)

    load data
    infile *
    into table t
    replace
    ( seqno RECNUM //載入每行的行號(hào)
    text Position(1:1024))
    BEGINDATA
    fsdfasj //自動(dòng)分配一行號(hào)給載入 表t 的seqno字段 此行為 1
    fasdjfasdfl // 此行為 2 ...

    9 ***** 載入有換行符的數(shù)據(jù)
    注意: unix 和 windows 不同 \\n &amp; /n
    &amp;lt; 1 &gt; 使用一個(gè)非換行符的字符
    LOAD DATA
    INFILE *
    INTO TABLE DEPT
    REPLACE
    FIELDS TERMINATED BY ','
    TRAILING NULLCOLS
    (DEPTNO,
    DNAME &quot;upper(:dname)&quot;,
    LOC &quot;upper(:loc)&quot;,
    LAST_UPDATED &quot;my_to_date( :last_updated )&quot;,
    COMMENTS &quot;replace(:comments,'\n',chr(10))&quot; // replace 的使用幫助轉(zhuǎn)換換行符
    )
    BEGINDATA
    10,Sales,Virginia,01-april-2001,This is the Sales\nOffice in Virginia
    20,Accounting,Virginia,13/04/2001,This is the Accounting\nOffice in Virginia
    30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting\nOffice in Virginia
    40,Finance,Virginia,987268297,This is the Finance\nOffice in Virginia

    &amp;lt; 2 &gt; 使用fix屬性
    LOAD DATA
    INFILE demo17.dat &quot;fix 101&quot;
    INTO TABLE DEPT
    REPLACE
    FIELDS TERMINATED BY ','
    TRAILING NULLCOLS
    (DEPTNO,
    DNAME &quot;upper(:dname)&quot;,
    LOC &quot;upper(:loc)&quot;,
    LAST_UPDATED &quot;my_to_date( :last_updated )&quot;,
    COMMENTS
    )
    demo17.dat
    10,Sales,Virginia,01-april-2001,This is the Sales
    Office in Virginia
    20,Accounting,Virginia,13/04/2001,This is the Accounting
    Office in Virginia
    30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
    Office in Virginia
    40,Finance,Virginia,987268297,This is the Finance
    Office in Virginia

    // 這樣裝載會(huì)把換行符裝入數(shù)據(jù)庫(kù) 下面的方法就不會(huì) 但要求數(shù)據(jù)的格式不同

    LOAD DATA
    INFILE demo18.dat &quot;fix 101&quot;
    INTO TABLE DEPT
    REPLACE
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&quot;'
    TRAILING NULLCOLS
    (DEPTNO,
    DNAME &quot;upper(:dname)&quot;,
    LOC &quot;upper(:loc)&quot;,
    LAST_UPDATED &quot;my_to_date( :last_updated )&quot;,
    COMMENTS
    )
    demo18.dat
    10,Sales,Virginia,01-april-2001,&quot;This is the Sales
    Office in Virginia&quot;
    20,Accounting,Virginia,13/04/2001,&quot;This is the Accounting
    Office in Virginia&quot;
    30,Consulting,Virginia,14/04/2001 12:02:02,&quot;This is the Consulting
    Office in Virginia&quot;
    40,Finance,Virginia,987268297,&quot;This is the Finance
    Office in Virginia&quot;

    &amp;lt; 3 &gt; 使用var屬性
    LOAD DATA
    INFILE demo19.dat &quot;var 3&quot;
    // 3 告訴每個(gè)記錄的前3個(gè)字節(jié)表示記錄的長(zhǎng)度 如第一個(gè)記錄的 071 表示此記錄有 71 個(gè)字節(jié)
    INTO TABLE DEPT
    REPLACE
    FIELDS TERMINATED BY ','
    TRAILING NULLCOLS
    (DEPTNO,
    DNAME &quot;upper(:dname)&quot;,
    LOC &quot;upper(:loc)&quot;,
    LAST_UPDATED &quot;my_to_date( :last_updated )&quot;,
    COMMENTS
    )
    demo19.dat
    07110,Sales,Virginia,01-april-2001,This is the Sales
    Office in Virginia
    07820,Accounting,Virginia,13/04/2001,This is the Accounting
    Office in Virginia
    08730,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
    Office in Virginia
    07140,Finance,Virginia,987268297,This is the Finance
    Office in Virginia

    &amp;lt; 4 &gt; 使用str屬性
    // 最靈活的一中 可定義一個(gè)新的行結(jié)尾符 win 回車換行 : chr(13)||chr(10)

    此列中記錄是以 a|\r\n 結(jié)束的
    select utl_raw.cast_to_raw('|'||chr(13)||chr(10)) from dual;
    結(jié)果 7C0D0A

    LOAD DATA
    INFILE demo20.dat &quot;str X'7C0D0A'&quot;
    INTO TABLE DEPT
    REPLACE
    FIELDS TERMINATED BY ','
    TRAILING NULLCOLS
    (DEPTNO,
    DNAME &quot;upper(:dname)&quot;,
    LOC &quot;upper(:loc)&quot;,
    LAST_UPDATED &quot;my_to_date( :last_updated )&quot;,
    COMMENTS
    )
    demo20.dat
    10,Sales,Virginia,01-april-2001,This is the Sales
    Office in Virginia|
    20,Accounting,Virginia,13/04/2001,This is the Accounting
    Office in Virginia|
    30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
    Office in Virginia|
    40,Finance,Virginia,987268297,This is the Finance
    Office in Virginia|

    ==============================================================================
    象這樣的數(shù)據(jù) 用 nullif 子句

    10-jan-200002350Flipper seemed unusually hungry today.
    10510-jan-200009945Spread over three meals.

    id position(1:3) nullif id=blanks // 這里可以是blanks 或者別的表達(dá)式
    // 下面是另一個(gè)列子 第一行的 1 在數(shù)據(jù)庫(kù)中將成為 null
    LOAD DATA
    INFILE *
    INTO TABLE T
    REPLACE
    (n position(1:2) integer external nullif n='1',
    v position(3:8)
    )
    BEGINDATA
    1 10
    20lg
    ------------------------------------------------------------

    如果是英文的日志 格式,可能需要修改環(huán)境變量 nls_lang or nls_date_format
    posted on 2007-07-03 17:48 一凡 閱讀(359) 評(píng)論(0)  編輯  收藏 所屬分類: DATABASE
    主站蜘蛛池模板: 亚洲男人的天堂网站| 日韩毛片免费无码无毒视频观看| 亚洲综合色区中文字幕| 亚洲国产精品综合久久网络| 免费成人福利视频| 永久在线观看免费视频| 日本视频免费观看| 亚洲精品乱码久久久久蜜桃 | 伊人久久亚洲综合影院首页| 久久亚洲一区二区| 亚洲精品无码永久中文字幕| 亚洲av无码天堂一区二区三区| 久久久久国产精品免费免费搜索| 久久精品国产免费观看三人同眠| 久久久精品午夜免费不卡| 一级一看免费完整版毛片| 美女扒开尿口给男人爽免费视频| 亚洲精品动漫免费二区| 在线综合亚洲欧洲综合网站| 亚洲国产高清美女在线观看| 亚洲好看的理论片电影| 久久精品国产亚洲av成人| 久久精品国产亚洲网站| 国产亚洲AV夜间福利香蕉149| 亚洲精品国产高清嫩草影院| 国产免费AV片无码永久免费| 国产免费卡一卡三卡乱码| 永久免费观看的毛片的网站| 大学生一级特黄的免费大片视频 | 亚洲黄网在线观看| 亚洲第一页中文字幕| 久久精品国产亚洲av影院| 久久亚洲精品人成综合网| 亚洲国产精品久久久久久| 中文字幕亚洲综合久久| 久久亚洲精品成人无码网站| 亚洲视频在线观看免费视频| 亚洲精品亚洲人成在线麻豆| 亚洲福利一区二区三区| 亚洲一久久久久久久久| 亚洲AV无码国产一区二区三区|