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

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

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

    李威 さぽている

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

    UTL_FILE使用配置篇


    以前曾寫過(guò)PL/SQL,當(dāng)時(shí)還是第一次接觸,什么都不明白
    順手寫了篇 《Oracle內(nèi)建包UTL_FILE使用說(shuō)明 》的博文,沒(méi)想到還被轉(zhuǎn)載(譬如百度搜索utl_file,第一篇就是,不過(guò)沒(méi)寫我的出處,可惜……)
    http://www.tkk7.com/liwei/archive/2007/01/10/92902.html

    當(dāng)時(shí)項(xiàng)目做完就沒(méi)接觸PL/SQL了,時(shí)隔2年半,又要寫PL/SQL了,而且遇到的問(wèn)題居然還是和UTL_FILE有關(guān)。
    于是上網(wǎng)找了些資料
    http://www.shift-the-oracle.com/plsql/utl_file/utl_file_dir.html
    http://www.shift-the-oracle.com/plsql/utl_file/create-directory.html
    日文的,不得不說(shuō),日本人做事實(shí)在是認(rèn)真,資料非常詳細(xì),看完之后,我就覺得我是高手了,可以整理點(diǎn)東西出來(lái)教別人了……哈哈
    廢話少說(shuō),開始

    現(xiàn)在一般跑UTL_FILE.FOPEN時(shí)會(huì)出現(xiàn)ORA-29280的錯(cuò)誤,出現(xiàn)這個(gè)錯(cuò)誤主要有2個(gè)原因
    1.文件夾沒(méi)有讀寫權(quán)限
    2.文件夾沒(méi)有進(jìn)行Oracle讀寫配置

    注意:這里討論的Oracle是在Unix類(包括linux,Solaris等)主機(jī)下安裝的。

    對(duì)于第1個(gè)原因,直接設(shè)定文件夾權(quán)限即可,譬如
    # chmod 700 /u05/file_storage/recv_dir
    這個(gè)沒(méi)啥好說(shuō),不是我要說(shuō)的重點(diǎn)。
    第2個(gè)原因,可以好好說(shuō)說(shuō)。
    Oracle進(jìn)行文件夾讀寫配置有2種方式
    1.設(shè)定UTL_FILE_DIR
    2.使用DIRECTORY 對(duì)象

    1.設(shè)定UTL_FILE_DIR
    Oracle 8i之前,貌似沒(méi)有DIRECTORY這個(gè)概念,所以只有一種方式。
    編輯 initORACLE_SID.ora 文件(ORACLE_SID是個(gè)變數(shù),因DB設(shè)定有所不同),添加
    UTL_FILE_DIR='/u05/file_storage/recv_dir','/u05/file_storage/send_dir'
    即可。
    Oracle 9i之后還可以利用ALTER SYSTEM 命令進(jìn)行設(shè)定
    ALTER SYSTEM SET
      UTL_FILE_DIR='/u05/file_storage/recv_dir','/u05/file_storage/send_dir'
    SCOPE = SPFILE ;
    也可以用命令來(lái)確認(rèn)設(shè)定是否正確
    SELECT NAME, VALUE FROM V$PARAMETER2 WHERE NAME='utl_file_dir' ;

    注意:Oracle 8i 之后的DB不推薦使用這種方式,主要是情報(bào)泄露方面,日本很在意這個(gè)。
    另外,讓所有文件夾有效可使用('*')。
    這種方法不方便的就是,設(shè)定了之后必須重啟Oracle才能使設(shè)定有效。


    使用例

    CREATE OR REPLACE PROCEDURE RIVUS.UTL_FILE_DIR_WRITE_SAMPLE
    AS
     vHandle  UTL_FILE.FILE_TYPE;
     vDirname VARCHAR2(250);
     vFilename VARCHAR2(250);
     vOutput  VARCHAR2(32767);
    BEGIN
     vDirname := '/u05/file_storage/send_dir';   -- 絕對(duì)路徑
     vFilename := 'test.txt';
     vHandle := UTL_FILE.FOPEN(vDirname ,vFilename,'w', 32767);
     
     vOutput := '利用 UTL_FILE_DIR 進(jìn)行的文件處理';
     UTL_FILE.PUT_LINE(vHandle, vOutput);
     UTL_FILE.FCLOSE(vHandle);
    EXCEPTION WHEN OTHERS THEN
     UTL_FILE.FCLOSE_ALL;
     RAISE;
    END;

    2.使用DIRECTORY 對(duì)象
    從Oracle 9i 開始UTL_FILE就能使用CREATE DIRECTORY了。
    首先文件夾必須存在,要有權(quán)限,我就不多說(shuō)了。
    然后做成DIRECTORY 對(duì)象
    CREATE DIRECTORY recv_area AS '/u05/file_storage/recv_dir';
    CREATE DIRECTORY send_area AS '/u05/file_storage/send_dir';

    當(dāng)recv_area已存在時(shí),會(huì)出錯(cuò),可使用下面這句
    CREATE OR REPLACE DIRECTORY recv_area AS '/u05/file_storage/recv_dir';

    接著,賦予用戶該DIRECTORY 對(duì)象的讀寫權(quán)限
    GRANT READ ON DIRECTORY recv_area TO user_name ;
    GRANT WRITE ON DIRECTORY send_area TO user_name ;

    同時(shí)讀寫權(quán)限
    GRANT READ,WRITE ON DIRECTORY recv_area TO user_name ;

    做好這些就可以確認(rèn)了
    SELECT * FROM ALL_DIRECTORIES ;
    看到自己做成的DIRECTORY了吧
    這里需要注意的是,當(dāng)初CREATE DIRECTORY的時(shí)候是小寫recv_area,現(xiàn)在這里是大寫RECV_AREA
    之后利用該DIRECTORY 對(duì)象時(shí)必須用大寫。
    還有,該DIRECTORY對(duì)象不包括上層目錄(這個(gè)是當(dāng)然的),也不包括子目錄。
    要利用子目錄需要再定義一個(gè)子目錄的DIRECTORY對(duì)象。

    使用例

    CREATE OR REPLACE PROCEDURE RIVUS.CREATE_DIR_WRITE_SAMPLE
    AS
     vHandle  UTL_FILE.FILE_TYPE;
     vDirname VARCHAR2(250);
     vFilename VARCHAR2(250);
     vOutput  VARCHAR2(32767);
    BEGIN
     vDirname := 'SEND_AREA';   -- 必須用大寫
     vFilename := 'test.txt';
     vHandle := UTL_FILE.FOPEN(vDirname ,vFilename,'w', 32767);
     
     vOutput := '利用CREATE DIRECTORY進(jìn)行的文件處理';
     UTL_FILE.PUT_LINE(vHandle, vOutput);
     UTL_FILE.FCLOSE(vHandle);
    EXCEPTION WHEN OTHERS THEN
     UTL_FILE.FCLOSE_ALL;
     RAISE;
    END;

    到此為止,問(wèn)題應(yīng)該解決了。

    posted on 2009-12-17 19:10 李威 閱讀(771) 評(píng)論(1)  編輯  收藏

    評(píng)論

    # re: UTL_FILE使用配置篇 2010-01-26 00:15 zhaogaifang

    李威,你太強(qiáng)了!我找了一晚上,終于在你這找到解決方法了,太感激了!  回復(fù)  更多評(píng)論   


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV日韩AV永久无码色欲| 99久久99久久精品免费看蜜桃| 亚美影视免费在线观看| 91成人免费观看| 婷婷亚洲天堂影院| 亚洲视频日韩视频| 美女又黄又免费的视频| 91嫩草免费国产永久入口| 亚洲精品视频久久久| 国产精品亚洲精品青青青| 免费无码H肉动漫在线观看麻豆| 卡1卡2卡3卡4卡5免费视频| 久久久久久亚洲精品| 色吊丝性永久免费看码| 欧美大尺寸SUV免费| 亚洲AV人人澡人人爽人人夜夜| 免费在线看黄网站| 性做久久久久免费看| 亚洲人成在线电影| 人妻在线日韩免费视频| 亚洲国产精品成人久久| 一个人看的www在线免费视频 | 两性色午夜视频免费播放| 国产成人免费片在线观看| 亚洲一级毛片免费看| 8x8x华人永久免费视频| 一本色道久久综合亚洲精品蜜桃冫| 一级毛片免费毛片一级毛片免费| 国产偷国产偷亚洲清高动态图| 免费人人潮人人爽一区二区| 日本黄页网站免费| 日韩精品无码免费专区网站| 亚洲成人一级电影| 四虎最新永久免费视频| 国产精品亚洲精品| 亚洲国产激情一区二区三区| 污视频网站免费观看| 亚洲国产天堂久久综合网站| 在线视频免费观看www动漫| 一级毛片无遮挡免费全部| 亚洲精品国产肉丝袜久久|