oracle的匯出功能會經常使用,也同樣經常會有需求進行匯出為csv檔案,用於往別的資料庫進行遷移,本次例項及在oracle實現匯出csv檔案操作。
sqlplus / as sysdba
sql > create or replace directory out_path as '/home/wenxuechao/csv_file';
sql > grant read ,write on directory out_path to ora_wen;
sqlplus ora_wen/ora_wen
create or replace procedure sql_to_csv
( p_query in varchar2, -- 執行sql
p_dir in varchar2, -- 匯出檔案的存放路徑
p_filename in varchar2 -- csv檔名稱
) is
l_output utl_file.file_type;
l_thecursor integer default dbms_sql.open_cursor;
l_columnvalue varchar2(4000);
l_status integer;
l_colcnt number := 0;
l_separator varchar2(1);
l_desctbl dbms_sql.desc_tab;
p_max_linesize number := 32000;
begin
--open file
l_output := utl_file.fopen(p_dir, p_filename, 'w', p_max_linesize);
--define date format
execute immediate 'alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''';
--open cursor
dbms_sql.parse(l_thecursor, p_query, dbms_sql.native);
dbms_sql.describe_columns(l_thecursor, l_colcnt, l_desctbl);
--dump table column name
for i in 1 .. l_colcnt loop
utl_file.put(l_output,l_separator || '"' || l_desctbl(i).col_name || '"'); --輸出字段
dbms_sql.define_column(l_thecursor, i, l_columnvalue, 4000);
l_separator := ',';
end loop;
utl_file.new_line(l_output); --輸出字段
--execute the query statement
l_status := dbms_sql.execute(l_thecursor);
--dump table column value
while (dbms_sql.fetch_rows(l_thecursor) > 0) loop
l_separator := '';
for i in 1 .. l_colcnt loop
dbms_sql.column_value(l_thecursor, i, l_columnvalue);
utl_file.put(l_output,
l_separator || '"' ||
trim(both ' ' from replace(l_columnvalue, '"', '""')) || '"');
l_separator := ',';
end loop;
utl_file.new_line(l_output);
end loop;
--close cursor
dbms_sql.close_cursor(l_thecursor);
--close file
utl_file.fclose(l_output);
exception
when others then
raise;
end;
/
exec sql_to_csv('select * from test where upd_dt=20180206','out_path','ods_mds.test.csv');
執行即可生成所需資料
該種方式適合匯出適量的檔案進行使用,如若是上億級別或者tb級別的還是建議使用oracle的自帶的匯出命令進行執行,更加高效。
java web匯出csv檔案
用csv匯出取代excel匯出的原因 poi匯出excel時會出現以下問題 excel2003 單sheet最多只能匯出65536條資料 excel2007 單sheet能匯出百萬級資料,彌補了2003的缺陷 excel每建立乙個單元格就會生成乙個物件,並且excel生成過程中不會釋放物件,所以會占...
匯出csv檔案示例
匯出csv檔案示例 csv檔案預設以英文逗號,做為列分隔符換行符 n作為行分隔符,寫入到乙個.csv檔案即可。含有英文逗號,和換行符會發生資料輸出會出現混亂,下面列出一些處理方法。特殊字元處理 1 含有英文逗號或換行符。這時可以使用雙引號 來將該字段內容括起來,csv預設認為由 括起來的內容是乙個字...
mysqldump 匯出CSV檔案
mysqldump 作為乙個資料匯出常用的命令 把相關的資料匯出成csv格式的檔案 mysqldump h 127.0.0.1 u root p database table t t home mysql fields enclosed by fields terminated by w 增加條件判...