–此處由linux服務器下 1.授權創建目錄的權限
Grant create any directory to username;2.創建目錄
create or replace directory op_file as '/u01/app/';3.讀寫對應目錄權限
GRANT WRITE,READ ON DIRECTORY ORADIR TO username;4.授權給用戶使用utl_file包的權限
GRANT EXECUTE ON utl_file TO username;5.文件寫入
CREATE OR REPLACE PROCEDURE PROC_RW_FILE IS LINE VARCHAR2(32767); OUT_FILE UTL_FILE.FILE_TYPE; --定義一個文件類型 type c_type is ref cursor; cur_sp_out C_TYPE;BEGIN --打開指定目錄的文件。op_file是文件所在的目錄,xx.txt是要讀取的文件,R文件寫入的模式 W:寫, --文件不存在則創建,會覆蓋 A:追加 R:讀 注意:這里的op_file需要用單引號引起來--此處for循環包含個人業務 FOR EMP IN (SELECT A.UUID, A.DRSJ, A.TBSJ, A.TNAME, A.QHBM, B.XQJOINT FROM T_IMP_REC A INNER JOIN FX_TABLENAME B ON (A.TNAME = B.TNAME) WHERE ROWNUM = 1) loop BEGIN OUT_FILE := UTL_FILE.FOPEN('OP_FILE', emp.uuid || '_' || emp.tname || '.txt', 'W'); OPEN cur_sp_out FOR -- 利用游標操作動態sql結果 'SELECT ' || EMP.XQJOINT || ' FROM ' || EMP.TNAME || ' WHERE TBSJ = :TBSJ AND SCSJ = :SCSJ AND QHBM LIKE :QHBM' USING EMP.TBSJ, EMP.DRSJ, EMP.QHBM || '%'; LOOP FETCH CUR_SP_OUT INTO LINE; EXIT WHEN CUR_SP_OUT%NOTFOUND; UTL_FILE.put_line(OUT_FILE,LINE); --不建議使用put END LOOP; CLOSE CUR_SP_OUT; UTL_FILE.FFLUSH(OUT_FILE); UTL_FILE.FCLOSE(OUT_FILE); --關閉文件流 END; end loop;END;新聞熱點
疑難解答