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

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

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

    李威 さぽている

    小說翻譯,日語相關轉移至http://blog.hjenglish.com/liwei

    Oracle內建包UTL_FILE使用說明

    最近用到了Oracle的包UTL_FILE,網上卻沒找到關于它的函數,過程使用說明,雖然都不是很難的東西,但簡單列出來,也能提高些效率。
    于是有了這篇文。
    以下翻譯來自《Oracle Built-in Packages》的第六章,只翻譯了部分,想了解的更詳細,請參考原文。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;

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

    打開文件時注意以下幾點:
    文件路徑和文件名合起來必須表示操作系統中一個合法的文件。
    文件路徑必須存在并可訪問;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只提供一個方法去讀取數據:GET_LINE

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

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

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

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

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

    UTL_FILE.PUT輸出數據時不會附加行終止符。

    UTL_FILE.PUT會產生以下異常
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR

    UTL_FILE.NEW_LINE
    在當前位置輸出新行或行終止符,必須使用NEW_LINE來結束當前行,或者使用PUT_LINE輸出帶有行終止符的完整行數據。

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

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

    NEW_LINE會產生以下異常
    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
    輸出一個字符串以及一個與系統有關的行終止符
    PROCEDURE UTL_FILE.PUT_LINE
    ??? (file IN UTL_FILE.FILE_TYPE,
    ??? buffer IN VARCHAR2);
    file
    由FOPEN返回的文件句柄
    buffer
    包含要寫入文件的數據緩存;Oracle8.0.3及以上最大允許32kB,早期版本只有1023B
    在調用UTL_FILE.PUT_LINE前,必須先打開文件。
    UTL_FILE.PUT_LINE會產生以下異常
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR

    例子
    這里利用UTL_FILE.PUT_LINE從表emp讀取數據到文件:
    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相當于PUT后加上NEW_LINE;也相當于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個參數,最多5個

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

    UTL_FILE.PUTF會產生以下異常
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR

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

    操作系統可能會緩存數據來提高性能。因此可能調用put后,打開文件卻看不到寫入的數據。在關閉文件前要讀取數據的話可以使用UTL_FILE.FFLUSH。
    典型的使用方法包括分析執行進度和調試紀錄。
    UTL_FILE.FFLUSH會產生以下異常
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.INVALID_OPERATION
    UTL_FILE.WRITE_ERROR

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

    注意file是一個IN OUT參數,因為在關閉文件后會設置為NULL
    當試圖關閉文件時有緩存數據未寫入文件,會拋出WRITE_ERROR異常

    UTL_FILE.FCLOSE會產生以下異常
    UTL_FILE.INVALID_FILEHANDLE
    UTL_FILE.WRITE_ERROR

    UTL_FILE.FCLOSE_ALL
    關閉所有已打開的文件
    PROCEDURE UTL_FILE.FCLOSE_ALL;

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

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

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


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


    網站導航:
     
    主站蜘蛛池模板: 成年女人免费v片| 免费女人高潮流视频在线观看| 毛片a级毛片免费播放下载| 亚洲色图黄色小说| 99re视频精品全部免费| 在线电影你懂的亚洲| 最近中文字幕免费2019| 亚洲国产精品综合久久2007| 黄瓜视频影院在线观看免费| 亚洲高清一区二区三区| 日本免费一区尤物| 西西人体大胆免费视频| 永久亚洲成a人片777777| a级在线免费观看| 亚洲成aⅴ人片在线影院八| 免费观看美女裸体网站| 羞羞视频免费观看| 亚洲狠狠婷婷综合久久久久 | 一级毛片在线完整免费观看| 亚洲?V乱码久久精品蜜桃| 美女被免费网站91色| 久久久久亚洲AV成人片| 成人在线免费观看| 国产亚洲综合视频| 亚洲国产精品成人久久| 2021国产精品成人免费视频| 国产精品亚洲一区二区三区| 中文字幕一精品亚洲无线一区| 国产激情免费视频在线观看| 亚洲人精品亚洲人成在线| 亚洲国产成人久久综合野外 | 久久笫一福利免费导航| 亚洲av乱码中文一区二区三区| 亚洲成a人片在线播放| 国产精品免费大片| 亚洲а∨精品天堂在线| 亚洲AV综合色区无码另类小说| 国产成人免费网站| XXX2高清在线观看免费视频| 亚洲最大成人网色香蕉| 狠狠亚洲狠狠欧洲2019|