在csv文件中导出oracle表

时间:2014-12-04 09:56:46

标签: sql oracle csv

我正在编写一个sql脚本来导出csv文件中的表内容(每个文件一个表)。我设法编写了一个成功的脚本,这要归功于这样的假脱机功能:

spool export.csv append

select 'fielda;fieldb;...' from dual
select fielda,fieldb,....  from table

spool off.

这个问题的第一个问题是,我必须从双重中选择才能获得第一行的字段名称。

第二个问题是,我必须编写每个字段,当你有10个表,每个字段超过20个字段时,它会变得非常痛苦。所以我的问题是,是否有任何pl sql函数,只接受参数表名,并导出csv文件中的完整内容。

提前致谢。

4 个答案:

答案 0 :(得分:2)

以下可能对您有用

set termout off
set serveroutput off
set feedback off
set colsep ';'
set lines 100000
set pagesize 0
set echo off
set feedback off

spool on

spool D:\csv_generator_tmp.sql
select qr from
(select 'select '||a.column_name||'||'';''||' qr,a.COLUMN_ID
from user_tab_cols a
where a.table_name = upper('cust')
and  a.column_id=1
union
select b.column_name||'||'';''||',b.COLUMN_ID
from user_tab_cols b
where b.table_name = upper('cust') and b.column_id<>1
and b.column_id<>(select max(c.column_id) from user_tab_cols c)
union 
select d.column_name||' from cust;',d.COLUMN_ID
from user_tab_cols d
where d.table_name = upper('cust')
and  d.column_id=(select max(d.column_id) from user_tab_cols d))
order by column_id asc;

spool off;

spool on

spool D:\cust.csv
@D:\csv_generator_tmp.sql

spool off;
/

答案 1 :(得分:0)

否,您可以使用user_tablesuser_tab_cols选择感兴趣的表格列:

select utc.table_name, utc.column_name
  from user_tab_cols utc
  where utc.table_name = 'CIRCUIT'

您可以通过游标进行管理并生成选择列。然后,您可以执行此查询。

答案 2 :(得分:0)

最好与UTL_FILE一起使用。我会向用户询问Ask tom链接https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:88212348059

你可以通过调用函数定期创建文件。

答案 3 :(得分:0)

您可以使用Python和cx_Oracle模块以CSV格式将数据提取到磁盘。

以下是使用cx_Oracle连接Oracle的方法:

constr='scott/tiger@localhost:1521/ORCL12'
con = cx_Oracle.connect(constr)
cur = con.cursor()

获取数据后,您可以遍历Python列表并以CSV格式保存数据。

for i, chunk in enumerate(chunks(cur)):
    f_out.write('\n'.join([column_delimiter.join(row[0]) for row in chunk]))
    f_out.write('\n')

我在编写TableHunter-For-Oracle

时使用了这种方法