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

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

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

    李威 さぽている

    小說翻譯,日語相關(guān)轉(zhuǎn)移至http://blog.hjenglish.com/liwei

    Oracle內(nèi)建包UTL_FILE使用說明

    最近用到了Oracle的包UTL_FILE,網(wǎng)上卻沒找到關(guān)于它的函數(shù),過程使用說明,雖然都不是很難的東西,但簡單列出來,也能提高些效率。
    于是有了這篇文。
    以下翻譯來自《Oracle Built-in Packages》的第六章,只翻譯了部分,想了解的更詳細(xì),請參考原文。http://www.oreilly.com/catalog/oraclebip/chapter/ch06.html

    FOPEN
    IS_OPEN
    GET_LINE
    PUT
    NEW_LINE
    PUT_LINE
    PUTF?
    FFLUSH?
    FCLOSE
    FCLOSE_ALL?
    ?
    UTL_FILE.FOPEN 用法
    FOPEN會打開指定文件并返回一個文件句柄用于操作文件。
    所有PL/SQL版本:???????????????? Oracle 8.0版及以上:
    ?FUNCTION UTL_FILE.FOPEN (????? FUNCTION UTL_FILE.FOPEN (
    ??? location???? IN VARCHAR2,????? location???? IN VARCHAR2,
    ??? filename???? IN VARCHAR2,????? filename???? IN VARCHAR2,
    ??? open_mode??? IN VARCHAR2)????? open_mode??? IN VARCHAR2,
    ?RETURN file_type;???????????????? max_linesize IN BINARY_INTEGER)
    ??????????????????????????????? RETURN file_type;

    參數(shù)
    ?
    location
    ?文件地址
    ?
    filename
    ?文件名
    ?
    openmode
    ?打開文件的模式(參見下面說明)
    ?
    max_linesize
    文件每行最大的字符數(shù),包括換行符。最小為1,最大為32767
    ?
    3種文件打開模式:
    R 只讀模式。一般配合UTL_FILE的GET_LINE來讀文件。
    W 寫(替換)模式。文件的所有行會被刪除。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用
    A 寫(附加)模式。原文件的所有行會被保留。在最末尾行附加新行。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用

    打開文件時注意以下幾點:
    文件路徑和文件名合起來必須表示操作系統(tǒng)中一個合法的文件。
    文件路徑必須存在并可訪問;FOPEN并不會新建一個文件夾。
    如果你想打開文件進行讀操作,文件必須存在;如果你想打開文件進行寫操作,文件不存在時,會新建一個文件。
    如果你想打開文件進行附加操作,文件必須存在。A模式不同于W模式。文件不存在時,會拋出INVALID_OPERATION異常。

    FOPEN 會拋出以下異常
    UTL_FILE.INVALID_MODE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.INVALID_PATH
    UTL_FILE.INVALID_MAXLINESIZE

    UTL_FILE.IS_OPEN用法
    如果文件句柄指定的文件已打開,返回TRUE,否則FALSE

    FUNCTION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;

    UTL_FILE只提供一個方法去讀取數(shù)據(jù):GET_LINE

    UTL_FILE.GET_LINE用法
    讀取指定文件的一行到提供的緩存。
    PROCEDURE UTL_FILE.GET_LINE
    ?? (file IN UTL_FILE.FILE_TYPE,
    ??? buffer OUT VARCHAR2);

    file
    由FOPEN返回的文件句柄
    ?
    buffer
    ?讀取的一行數(shù)據(jù)的存放緩存

    buffer必須足夠大。否則,會拋出VALUE_ERROR 異常。行終止符不會被傳進buffer。

    異常
    NO_DATA_FOUND
    VALUE_ERROR
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.READ_ERROR

    ?
    UTL_FILE.PUT用法
    在當(dāng)前行輸出數(shù)據(jù)
    PROCEDURE UTL_FILE.PUT
    ??? (file IN UTL_FILE.FILE_TYPE,
    ??? buffer OUT VARCHAR2);
    file
    由FOPEN返回的文件句柄
    buffer
    包含要寫入文件的數(shù)據(jù)緩存;Oracle8.0.3及以上最大允許32kB,早期版本只有1023B

    UTL_FILE.PUT輸出數(shù)據(jù)時不會附加行終止符。

    UTL_FILE.PUT會產(chǎn)生以下異常
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR

    UTL_FILE.NEW_LINE
    在當(dāng)前位置輸出新行或行終止符,必須使用NEW_LINE來結(jié)束當(dāng)前行,或者使用PUT_LINE輸出帶有行終止符的完整行數(shù)據(jù)。

    PROCEDURE UTL_FILE.NEW_LINE
    ?? (file IN UTL_FILE.FILE_TYPE,
    ??? lines IN NATURAL := 1);
    file
    由FOPEN返回的文件句柄
    lines
    要插入的行數(shù)

    如果不指定lines參數(shù),NEW_LINE會使用默認(rèn)值1,在當(dāng)前行尾換行。如果要插入一個空白行,可以使用以下語句:
    UTL_FILE.NEW_LINE (my_file, 2);
    如果lines參數(shù)為0或負(fù)數(shù),什么都不會寫入文件。

    NEW_LINE會產(chǎn)生以下異常
    VALUE_ERROR
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR
    例子
    如果要在UTL_FILE.PUT后立刻換行,可以如下例所示:
    PROCEDURE add_line (file_in IN UTL_FILE.FILE_TYPE, line_in IN VARCHAR2)
    IS
    BEGIN
    ?? UTL_FILE.PUT (file_in, line_in);
    ?? UTL_FILE.NEW_LINE (file_in);
    END;


    UTL_FILE.PUT_LINE
    輸出一個字符串以及一個與系統(tǒng)有關(guān)的行終止符
    PROCEDURE UTL_FILE.PUT_LINE
    ??? (file IN UTL_FILE.FILE_TYPE,
    ??? buffer IN VARCHAR2);
    file
    由FOPEN返回的文件句柄
    buffer
    包含要寫入文件的數(shù)據(jù)緩存;Oracle8.0.3及以上最大允許32kB,早期版本只有1023B
    在調(diào)用UTL_FILE.PUT_LINE前,必須先打開文件。
    UTL_FILE.PUT_LINE會產(chǎn)生以下異常
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR

    例子
    這里利用UTL_FILE.PUT_LINE從表emp讀取數(shù)據(jù)到文件:
    PROCEDURE emp2file
    IS
    ?? fileID UTL_FILE.FILE_TYPE;
    BEGIN
    ?? fileID := UTL_FILE.FOPEN ('/tmp', 'emp.dat', 'W');
    ?
    ?? /* Quick and dirty construction here! */
    ?? FOR emprec IN (SELECT * FROM emp)
    ?? LOOP
    ????? UTL_FILE.PUT_LINE
    ???????? (TO_CHAR (emprec.empno) || ',' ||
    ????????? emprec.ename || ',' ||
    ????????? ...
    ????????? TO_CHAR (emprec.deptno));
    ?? END LOOP;
    ?
    ?? UTL_FILE.FCLOSE (fileID);
    END;
    PUT_LINE相當(dāng)于PUT后加上NEW_LINE;也相當(dāng)于PUTF的格式串"%s\n"。

    UTL_FILE.PUTF
    以一個模版樣式輸出至多5個字符串,類似C中的printf

    PROCEDURE UTL_FILE.PUTF
    ??? (file IN FILE_TYPE
    ??? ,format IN VARCHAR2
    ??? ,arg1 IN VARCHAR2 DEFAULT NULL
    ??? ,arg2 IN VARCHAR2 DEFAULT NULL
    ??? ,arg3 IN VARCHAR2 DEFAULT NULL
    ??? ,arg4 IN VARCHAR2 DEFAULT NULL
    ??? ,arg5 IN VARCHAR2 DEFAULT NULL);
    file
    由FOPEN返回的文件句柄
    format
    決定格式的格式串
    argN
    可選的5個參數(shù),最多5個

    格式串可使用以下樣式
    %s
    在格式串中可以使用最多5個%s,與后面的5個參數(shù)一一對應(yīng)
    \n
    換行符。在格式串中沒有個數(shù)限制
    %s會被后面的參數(shù)依次填充,如果沒有足夠的參數(shù),%s會被忽視,不被寫入文件

    UTL_FILE.PUTF會產(chǎn)生以下異常
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR

    UTL_FILE.FFLUSH
    確保所有數(shù)據(jù)寫入文件。
    PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);
    file
    由FOPEN返回的文件句柄

    操作系統(tǒng)可能會緩存數(shù)據(jù)來提高性能。因此可能調(diào)用put后,打開文件卻看不到寫入的數(shù)據(jù)。在關(guān)閉文件前要讀取數(shù)據(jù)的話可以使用UTL_FILE.FFLUSH。
    典型的使用方法包括分析執(zhí)行進度和調(diào)試紀(jì)錄。
    UTL_FILE.FFLUSH會產(chǎn)生以下異常
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR

    UTL_FILE.FCLOSE
    關(guān)閉文件
    PROCEDURE UTL_FILE.FCLOSE (file IN OUT FILE_TYPE);
    file
    由FOPEN返回的文件句柄

    注意file是一個IN OUT參數(shù),因為在關(guān)閉文件后會設(shè)置為NULL
    當(dāng)試圖關(guān)閉文件時有緩存數(shù)據(jù)未寫入文件,會拋出WRITE_ERROR異常

    UTL_FILE.FCLOSE會產(chǎn)生以下異常
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.WRITE_ERROR

    UTL_FILE.FCLOSE_ALL
    關(guān)閉所有已打開的文件
    PROCEDURE UTL_FILE.FCLOSE_ALL;

    在結(jié)束程序時要確保所有打開的文件已關(guān)閉,可使用FCLOSE_ALL
    也可以在EXCEPTION使用,當(dāng)異常退出時,文件也會被關(guān)閉。
    EXCEPTION
    ?? WHEN OTHERS
    ??
    THEN
    ????? UTL_FILE.FCLOSE_ALL;
    ????? ... other clean up activities ...
    END;

    注意:當(dāng)使用FCLOSE_ALL關(guān)閉所有文件時,文件句柄并不會標(biāo)記為NULL,使用IS_OPEN會返回TRUE。但是,那些關(guān)閉的文件不能執(zhí)行讀寫操作(除非你再次打開文件)。
    UTL_FILE.FCLOSE_ALL會產(chǎn)生以下異常
    UTL_FILE.WRITE_ERROR

    posted on 2007-01-10 14:16 李威 閱讀(5517) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品久久久久久亚洲小说| 亚洲丝袜美腿视频| 亚洲精品9999久久久久无码 | 免费无码又爽又高潮视频| 亚洲精品视频专区| www视频免费看| 日本亚洲精品色婷婷在线影院| 国产精品入口麻豆免费观看| 亚洲精品亚洲人成在线麻豆| 美女被cao免费看在线看网站| 亚洲成a人片77777群色| 免费大片黄在线观看yw| 亚洲熟妇无码一区二区三区| 成人免费视频国产| h视频在线观看免费| 亚洲大尺度无码无码专区| 国产激情免费视频在线观看| 久久国产亚洲精品无码| 桃子视频在线观看高清免费完整| 亚洲校园春色另类激情| 四虎永久成人免费| 97超高清在线观看免费视频| 色婷婷六月亚洲婷婷丁香| AV片在线观看免费| 午夜在线免费视频| 亚洲午夜久久影院| 精品国产麻豆免费网站| xxxxxx日本处大片免费看| 亚洲一级二级三级不卡| 免费高清资源黄网站在线观看| 特级毛片A级毛片免费播放| 亚洲大成色www永久网站| 青草草色A免费观看在线| 黄页网站在线观看免费| 国产v亚洲v天堂无码网站| 久久不见久久见中文字幕免费| 香蕉国产在线观看免费| 亚洲一区二区三区在线网站| 永久亚洲成a人片777777| 国产免费的野战视频| 黄色视频在线免费观看|