PLSQL將資料寫入指定檔案(讀寫檔案)

2021-08-18 22:57:49 字數 4597 閱讀 3954

1、登陸sys或者sysdate建立檔案路徑並授權給使用者user_01

create directory filepath as 'd:\test'  --建立乙個路徑filepath

grant read,write on directory filepath to user_01; --給使用者user_01授予路徑讀寫的許可權

2、在指定路徑下建立資料夾(如:d:\test),並在該資料夾下面建立需要寫入資料的檔案(如:122.txt)

3、登陸被授予讀寫許可權的使用者,進行讀寫操作

declare

l_file utl_file.file_type; --定義乙個檔案變數l_file,型別是file_type

begin

l_file := utl_file.fopen('filepath', '122.txt', 'w'); --給檔案變數賦予乙個初值122.txt,最後乙個引數w表示寫入

for i in

(select a.id||' '||a.name||' '||a.time result from table1 a);

loop

utl_file.put_line(l_file,i.result);

end loop;

utl_file.fclose(l_file);--關閉檔案

end;

4、在檔案122.txt中可檢視寫入的結果

5、知識點:utl_file包

(1)utl_file:是oracle提供的乙個用來讀寫檔案的標準工具包

(2)路徑:使用包utl_file讀寫作業系統的檔案,首先需要建立路徑(directory)並給使用者授讀寫許可權,oracle目錄(路徑)的作用就是讓資料庫與作業系統進行檔案的互動;

建立目錄(路徑)的使用者必須具有dba角色或者被賦予create any directory許可權,如果普通使用者被賦予create any directory許可權,那該使用者就自動具備路徑的讀寫許可權;

建立路徑:create directory filepath as 'd:\test';

路徑讀寫授權:grant read,write on directory filepath to user_01;

utl_file包執行授權:grant execute on utl_file to user_01;

(3)file_type:utl_file包中定義的記錄型別,其成員是私有的,不能直接呼叫

(4)fopen:用於開啟檔案的函式,最多可以開啟50個檔案

語法:utl_file.fopen( location in varchar2, --檔案路徑,必須使用directory物件,且名稱必須為大寫

filename in varchar2,--檔名稱

mode in varchar2,--開啟模式

max_linesize in varchar2 --指定檔案每行存放的最大字元數

);return file_type;--返回預操作檔案的指標(控制代碼)

注:開啟模式有'w'、'r'、'a'、'wb'、'rb'、'ab'共6種

'w':寫檔案(文字),該檔案不存在的話會自動建立,存在的話會覆蓋原檔案

'r':讀檔案(文字),該檔案必須存在,否則會報錯

'a':追加檔案(文字),該檔案若不存在,會以write模式建立此檔案

帶'b'字尾的為使用byte(位元組)模式,bolb和varchar2不一樣,當檔案為bolb物件時,開啟模式必須選擇帶'b'字尾的模式

(5) is_open:用於判斷檔案是否已開啟的函式

utl_file.is_open(

file in file_type --指定檔案的控制代碼

);return boolean;--如果已經開啟返回ture,否則返回fulse

(6)fclose:用於關閉已開啟檔案的函式

utl_file.fclose(file in\out file_type);

fclose_all:用於關閉當前所有開啟檔案的函式

utl_file.fclose_all;

(7)put_line:用於將文字緩衝區內容寫入到檔案中的函式,當使用該函式為文字追加內容時,會自動在文字的尾部追加行終止符

utl_file.put_line(

file in file_type,--檔案指標(控制代碼)

buffer in varchar2,--指定存放資料的緩衝區

autoflush in boolean default false--指定是否自動重新整理緩衝區資料

)

(8)get_line:用於讀取已開啟檔案的行資料,行資料會被讀取到輸出緩衝區

utl_file.get_line(  

file in

file_type,    

-- 檔案控制代碼

buffer out

varchar2,    

-- 儲存讀取的buff

linesize in

number,    

-- 讀取的最大位元組數

len in

pls_integer 

default

null

-- 實際讀取長度  

);(9)get_raw:用於從檔案中讀取raw字串,並調節檔案指標到讀取位置

utl_file.get_raw(  

fid in

utl_file.type,    

-- 檔案控制代碼

r  out

nocopy raw,    

-- 讀取的快取buff

len in

pls_integer 

default

null

-- 讀取長度

);(10)put:將緩衝區中內容寫入檔案的函式,使用該函式時,檔案必須以寫模式開啟

utl_file.put(  

file in

file_type,  

buffer in

varchar2  

); (11)put_raw:將raw緩衝區中的內容寫入檔案的函式

utl_file.put_raw(

file in file_type,

r in raw,--指定存放raw資料的緩衝區

autoflush in boolean default false --指定是否自動重新整理緩衝區資料

)

(12)new_line:為檔案增加行終止符的函式

utl_file.new_line(

file in file_type,

lines in natrual :=1 --指定在檔案中增加行終止符的個數

)

(13)fflush:強制將資料寫入檔案中的函式(正常情況下,給檔案寫入資料時,會將資料暫時先存放在緩衝區中)

utl_file.fflush(file in file_type)
(14)fremove:用於刪除磁碟檔案

utl_file.fremove(

location in varchar2, --指定路徑,必須大寫

filename in varchar2 --指定要刪除的檔名

)

(15)fcopy:用於將原始檔的全部或部分內容複製到目標檔案中,在使用該函式的過程中,如果不設定起始行和結束行,將複製檔案所有內容

utl_file.fcopy(  

location 

invarchar2,    

-- 指定源directory路徑物件

filename 

invarchar2,    

-- 指定檔名

dest_dir 

invarchar2,    

-- 希望複製到的directory路徑物件

dest_file 

invarchar2,    

-- 複製後的檔名

start_line 

inpls_integer

default

1,    

-- 指定起始行號

end_line 

inpls_integer 

default

null 

-- 指定結束行號

);(16)frename:用於修改已存在的檔名稱

utl_file.frename(  

location 

invarchar2,  

filename 

invarchar2,  

dest_dir 

invarchar2,  

dest_file 

invarchar2,  

overwrite 

inboolean default

false

-- 是否覆蓋已經存在的檔案

); 

Matlab將資料寫入檔案

1 清理現有工作區 2 準備寫入資料 3 獲取目標檔案寫入操作許可權 4 將資料寫入目標檔案 5 將檔案操作入口關閉 6 將寫入的檔案內容展示在控制台 清理工作區 clear clc 準備寫入資料 x 0 0.01 pi y sin x 這個圖畫不畫都可以 plot x,y 獲取目標檔案寫入許可權 ...

寫入資料java將資料寫入到csv檔案

這兩天一直在查詢寫入資料之類的問題,下午正好有機會和大家討論一下.對於csv件文,因為要將資料分離的寫入到個一每單元格中。用什麼來開分以後單元格和下乙個單元格之間呢?這裡就用到了 逗號可以割分單元格。舉例說明 我們這裡用乙個輸出流將資料寫入到csv件文中 fileoutputstream fos n...

將DataGrid資料寫入Excel檔案

程式 this.enableviewstate false system.globalization.cultureinfo mycitrad new system.globalization.cultureinfo zh cn true system.io.stringwriter ostring...