我們知道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_line
和end_line
分別表示複製源文件的行數區間,不是必要的字段,默認複製全部內容。
更多的內容可以參考Oracle之UTL_FILE 包用法詳解