用PLSQL中的UTL_FILE包來讀寫文件

我們知道PLSQL是一門非常強大的語言,上次有用這們語言做過發送郵件的程序,今天我們來看一下,如何用PLSQL來操作文件。

首先我們使用管理員賬號來創建一個路徑,並將這個路徑進行授權給相應的用戶。

CREATE OR REPLACE directory file_dir AS 'D:\test'; --windows系統路徑
grant READ, WRITE ON directory file_dir TO customerUser; --路徑授權,添加對路徑讀、寫權限
grant EXECUTE ON utl_file TO customerUser; --utl_file包授權,添加執行權限

完成上面的授權之後,我們來使用這個customerUser 賬號登錄進去(如我使用的是PL/SQL Develpoer)。


如何保存數據到文件
這裏我們分爲三步:打開文件,寫入數據,關閉文件

--====保存數據到文件====--
DECLARE
  v_file  utl_file.file_type;
  v_input CLOB := '我是要保存到文件裏面的內容';
BEGIN
  --打開文件
  v_file := utl_file.fopen('FILE_DIR', 'data.txt', 'w');
  --將數據寫入到文件中
  utl_file.put_line(v_file, v_input);
  --關閉文件
  utl_file.fclose(v_file);
EXCEPTION
  WHEN utl_file.access_denied THEN
    dbms_output.put_line('拒絕訪問!');
  WHEN OTHERS THEN
    dbms_output.put_line('SQLERRM: ' || SQLERRM);
END;

注意到上面的打開文件的代碼中使用的打開模式是w
這裏文件的打開模式有如下三種
W:是寫文件,文件不存在則創建文件,如果文件存在則覆蓋之前文件的內容
A:是追加,若文件不存在則創建文件,文件存在,則在文件結束後面追加內容
還有一種在讀文件的時候會使用
R:讀文件,文件不存在報錯,文件存在則將文件內容讀出來


如何讀取文件中的數據
在從文件讀取數據的過程我們也分爲三步:打開文件,讀取文件數據,關閉文件

--====讀取文件中的數據====--
DECLARE
  v_file   utl_file.file_type;
  v_output CLOB := '';
BEGIN
  --打開文件
  v_file := utl_file.fopen('FILE_DIR', 'data.txt', 'r');
  --將文件的數據寫入到變量中
  utl_file.get_line(v_file, v_output);
  --關閉文件
  utl_file.fclose(v_file);
  --測試輸出文件內容
  dbms_output.put_line(v_output);
EXCEPTION
  WHEN utl_file.access_denied THEN
    dbms_output.put_line('拒絕訪問!');
  WHEN OTHERS THEN
    dbms_output.put_line('SQLERRM: ' || SQLERRM);
END;

如何拷貝文件中的數據待另外一個文件
這是我們直接使用UTL_FILE 裏面的fcopy() 來進行文件的複製操作

--====從一個文件拷貝數據到另外一個文件====--
BEGIN
  utl_file.fcopy(src_location  => 'FILE_DIR',
                 src_filename  => 'src.txt',
                 dest_location => 'FILE_DIR',
                 dest_filename => 'dst.txt',
                 start_line    => '1',
                 end_line      => '4');
EXCEPTION
  WHEN utl_file.access_denied THEN
    dbms_output.put_line('拒絕訪問!');
  WHEN OTHERS THEN
    dbms_output.put_line('SQLERRM: ' || SQLERRM);
END;

上面代碼中的start_lineend_line 分別表示複製源文件的行數區間,不是必要的字段,默認複製全部內容。


更多的內容可以參考Oracle之UTL_FILE 包用法詳解


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章