在oracle中将多个表数据导出到csv文件中

时间:2015-05-05 08:27:59

标签: sql oracle plsql utl-file

我有五个不同的表作为a,b,c,d,e,列数不同。 我想从这五个表中将数据导出到csv文件中。 通常,我在所有五个表中都有seq_no.seq_no明智的文件应该生成。

并且

table a data should be row 1

table b data should be row 2

table c data should be row 3

table d data should be row 4

table d data should be row n    

table e data should be row n+1

在表a,b,c,e中,1 seq_no

只有1条记录

在表d中,多个记录将用于1 seq_no。

E.G

Seq_no = 1然后只有那些数据才会被导出到csv。

seq_no = 2然后只有那些数据才会导出到csv

.....等

如果count(seq_no)= 10则应导出10个文件。

我怎样才能通过plsql函数/过程实现这个目标?

1 个答案:

答案 0 :(得分:0)

创建由seq_no索引的文件句柄的关联数组

*

迭代行并将其csv行放入文件中(您必须通过连接替换type ta_file is table of utl_file.file_type index by number(5); va_file ta_file;

'{csv string from x}'

关闭所有文件(迭代va_file)

for r in (
  select * from (
    select seq_no, '{csv string from a}' s, 'a' t from a
    union all
    select seq_no, '{csv string from b}' s, 'b' t from b
    union all
    select seq_no, '{csv string from c}' s, 'c' t from c
    union all
    select seq_no, '{csv string from d}' s, 'd' t from d
    union all
    select seq_no, '{csv string from e}' s, 'e' t from e
  ) order by t, seq_no
) loop
  if not va_file.exists(r.seq_no) then
    -- for new seq_no open new seq_no file
    va_file(r.seq_no) := fopen(filepath, filename || r.seq_no || fileext, 'W');
  end if;
  -- write csv to seq_no file
  utl_file.put_line(va_file(r.seq_no), r.s);
end loop;