使用utl_file做選擇性資料匯出
或者在和外部系統的互動中,使用xml或者文字檔案是一個很相容的選擇,這個時候使用exp/expdp也滿足不了要求。
這個時候可以考慮使用utl_file的提供的一些功能來做選擇性的資料匯出。
先來使用utl_file做一個簡單的例子,輸出兩行文字內容到output.txt檔案中。一行Hello,一行hello word
declare
v_filehandle UTL_FILE.FILE_TYPE;
begin
v_filehandle:=utl_file.fopen('/u01/ora11g/test/test','output.txt','w');
UTL_FILE.PUTF (v_filehandle,' REPORT: GENERATED ON%s\n', SYSDATE);
UTL_FILE.NEW_LINE (v_filehandle);
UTL_FILE.PUTF (v_filehandle, '%s\n','hello ');
UTL_FILE.PUTF (v_filehandle, 'hello: %s\n','world ');
UTL_FILE.FCLOSE (v_filehandle);
end;
/
執行pl/sql之後的輸出如下:
[ora11g@rac1 test]$ cat output.txt
REPORT: GENERATED ON14-SEP-14
hello
hello: world
這個地方需要說明一下,我在 /u01/ora11g/test/test 輸出了檔案output.txt,事先沒有建立任何的directory。因為utl_file_dir這個引數的預設值是*
SQL> show parameter utl
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
create_stored_outlines string
utl_file_dir string *
我們來做一個更有實際意義的。
從表data中輸出100行資料到output.txt中。
declare
v_filehandle UTL_FILE.FILE_TYPE;
begin
v_filehandle:=utl_file.fopen('/u01/ora11g/test/test','output.txt','w');
UTL_FILE.PUTF (v_filehandle,'---export data from table data:', SYSTIMESTAMP);
UTL_FILE.NEW_LINE (v_filehandle);
for i in(select * from data where rownum<100) loop
UTL_FILE.PUTF (v_filehandle, '%s,%s\n',i.zhu,i.ke);
end loop;
UTL_FILE.FCLOSE (v_filehandle);
end;
/
輸出內容如下,可以看到都是按照逗號分隔。顯示的情況還不錯。
[ora11g@rac1 test]$ cat output.txt
---export data from table data:
0,2
2,1
1,2
1,0
3,1
0,1
0,3
2,2
6,2
1,0
0,2
0,0
3,0
1,0
1,2
0,1
因為utl_file在新版本中一直都是推薦使用directory來替代的,我們也可以使用directory物件來實現。黃色的部分TEST就是directory的名字,指向'/u01/ora11g/test/test'
declare
v_filehandle UTL_FILE.FILE_TYPE;
begin
v_filehandle:=utl_file.fopen('TEST','output.txt','w');
UTL_FILE.PUTF (v_filehandle,'---export data from table data:', SYSTIMESTAMP);
UTL_FILE.NEW_LINE (v_filehandle);
for i in(select * from data where rownum<100) loop
UTL_FILE.PUTF (v_filehandle, '%s,%s\n',i.zhu,i.ke);
end loop;
UTL_FILE.FCLOSE (v_filehandle);
end;
/
輸出的結果沒有任何變化。
有的人可能說是用spool也可以實現,而且更靈活,在一定程度上是的,不過還是和utl_file有一定的區別。
比如我沒有設定NLS_LANG的變數值,在sqlplus中檢視中文可能就有問題。但是系統層面沒有任何影響。
可以看到在sqlplus中顯示是亂碼的形式,但是在輸出檔案中顯示的是正確的中文格式。
SQL> select *from test;
ID NAME
---------- -----------------------------
1 ??????
SQL> declare
2 v_filehandle UTL_FILE.FILE_TYPE;
3 begin
4 v_filehandle:=utl_file.fopen('/u01/ora11g/test/test','output.txt','w');
5 UTL_FILE.PUTF (v_filehandle,'---export data from table data:', SYSTIMESTAMP);
6 UTL_FILE.NEW_LINE (v_filehandle);
7 for i in(select * from test where rownum<100) loop
8 UTL_FILE.PUTF (v_filehandle, '%s,%s\n',i.id,i.name);
9 end loop;
10 UTL_FILE.FCLOSE (v_filehandle);
11 end;
12 /
PL/SQL procedure successfully completed.
SQL> host
[ora11g@rac1 test]$ cat output.txt
---export data from table data:
1,突破玩法界限
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1347026/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用 UTL_FILE匯出TAB和逗號分割資料
- ORACLE百萬資料匯入匯出解決方法(LOADER、UTL_FILE)Oracle
- 使用xml檔案,做資料的匯入,匯出 (轉)XML
- Oracle - UTL_FILE包之BLOB匯入和匯出Oracle
- clob utl_file 匯出成TXT檔案
- 使用C#選擇資料夾、開啟資料夾、選擇檔案C#
- 大資料使用Excel匯出大資料Excel
- 【UTL_FILE】使用UTL_FILE包生成檔案並寫入資料
- Oracle使用資料泵匯出匯入表Oracle
- 【EXP】使用EXP的QUERY選項匯出表中部分資料
- laravel-excel匯出excel下拉選擇框LaravelExcel
- expdp 使用QUERY 匯出部分資料。
- 使用資料泵工具expdp工具匯出資料
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- vue+element + table將選中的資料匯出為excel(匯出的是當前頁選中的資料)VueExcel
- 【匯入匯出】將資料匯入到其他使用者
- oracle sqldeveloper選擇性複製備份資料庫OracleSQLDeveloper資料庫
- 使用Dbeaver 進行資料的匯入和匯出
- mongodb使用自帶命令工具匯出匯入資料MongoDB
- JQuery選擇器——可見性篩選選擇器和屬性篩選選擇器jQuery
- 資料庫 MySQL 資料匯入匯出資料庫MySql
- Oracle使用sqluldr2匯出資料OracleSQL
- 使用資料泵匯出DDL語句
- 資料泵匯出匯入
- Oracle 資料匯入匯出Oracle
- mysql資料匯入匯出MySql
- mysql資料匯出匯入MySql
- Oracle資料匯入匯出Oracle
- php做EXCEL資料匯出匯入開發的一些小問題PHPExcel
- 精讀《使用 CSS 屬性選擇器》CSS
- 使用csv批量匯入、匯出資料的需求處理
- php 資料匯出PHP
- mysql匯出資料MySql
- Hive資料匯出Hive
- MySQL 匯出資料MySql
- ociuldr 資料匯出
- 快速匯出資料
- mysqldump匯出資料MySql