<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)航:
     
    主站蜘蛛池模板: 精品亚洲国产成人av| 国产成人精品日本亚洲直接| 一级A毛片免费观看久久精品 | 精品国产_亚洲人成在线| 日韩毛片免费无码无毒视频观看 | 亚洲欧美日韩国产精品一区| 成年人免费观看视频网站| 国产精品亚洲一区二区麻豆| 免费观看成人毛片a片2008| 亚洲色大网站WWW永久网站| 日韩中文字幕在线免费观看| 免费人人潮人人爽一区二区| 久久精品国产亚洲AV不卡| 免费人成激情视频在线观看冫| 亚洲日本va中文字幕久久| 久久免费视频观看| 亚洲六月丁香六月婷婷蜜芽| 日韩免费观看的一级毛片| 特a级免费高清黄色片| 亚洲精品成人网站在线观看| 99久久国产免费中文无字幕| 亚洲综合在线一区二区三区| 国产一级大片免费看| A国产一区二区免费入口| 91亚洲一区二区在线观看不卡| www.黄色免费网站| 性无码免费一区二区三区在线| 亚洲视频.com| 国产区卡一卡二卡三乱码免费| 国产免费黄色无码视频| 亚洲第一二三四区| www国产亚洲精品久久久| 今天免费中文字幕视频| 亚洲高清有码中文字| 中文字幕中韩乱码亚洲大片| 8x成人永久免费视频| 国产AV日韩A∨亚洲AV电影| 亚洲成a人片在线观看中文动漫| 性做久久久久久免费观看| 精品国产污污免费网站入口在线| 亚洲黑人嫩小videos|