oracle使用SQL导出cvs

如何用sql语句导出csv文件
如题

------解决方案--------------------
set heading off 
set termout off 
spool c:\table_name.csv 
select 
col1|| ', '||col2|| ', '||col3 from table_name; 
spool off 
------解决方案--------------------
在pl/sql 的command window里執行不會有問題的。。。。 
sql plus也行... 
------解决方案--------------------
PL/SQL can do it, it might look like: 

create or replace function dump_csv( p_query in varchar2, 
p_separator in varchar2 
default ', ', 
p_dir in varchar2 , 
p_filename in varchar2 ) 
return number 
AUTHID CURRENT_USER 
is 
l_output utl_file.file_type; 
l_theCursor integer default dbms_sql.open_cursor; 
l_columnValue varchar2(2000); 
l_status integer; 
l_colCnt number default 0; 
l_separator varchar2(10) default ' '; 
l_cnt number default 0; 
begin 
l_output := utl_file.fopen( p_dir, p_filename, 'w ' ); 

dbms_sql.parse( l_theCursor, p_query, dbms_sql.native ); 

for i in 1 .. 255 loop 
begin 
dbms_sql.define_column( l_theCursor, i, 
l_columnValue, 2000 ); 
l_colCnt := i; 
exception 
when others then 
if ( sqlcode = -1007 ) then exit; 
else 
raise; 
end if; 
end; 
end loop; 

dbms_sql.define_column( l_theCursor, 1, l_columnValue, 
2000 ); 

l_status := dbms_sql.execute(l_theCursor); 

loop 
exit when ( dbms_sql.fetch_rows(l_theCursor) <= 0 ); 
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 || 
l_columnValue ); 
l_separator := p_separator; 
end loop; 
utl_file.new_line( l_output ); 
l_cnt := l_cnt+1; 
end loop; 
dbms_sql.close_cursor(l_theCursor); 

utl_file.fclose( l_output ); 
return l_cnt; 
end dump_csv; 



You would use that for example like this: 

create or replace procedure test_dump_csv 
as 
l_rows number; 
begin 
l_rows := dump_csv( 'select * 
from all_users 
where rownum < 25 ', 
', ', '/tmp ', 'test.dat ' ); 
end; 



Make sure to read about the INIT.ORA parameters (utl_file_dir) you need to setup 
!!! 

猜你喜欢

转载自blog.csdn.net/yisun123456/article/details/79099161
今日推荐