【问题标题】:export multiple table data into csv file in oracle在oracle中将多个表数据导出到csv文件中
【发布时间】:2015-07-14 21:10:13
【问题描述】:

我有五个不同的表,即 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 条记录用于 1 seq_no

在表 d 中,1 个 seq_no 会有多条记录。

E.G

Seq_no = 1 则只有该数据应导出到 csv。

seq_no = 2 那么只有该数据应该被导出到 csv

.....等等

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

我如何通过 plsql 函数/程序来实现这一点?

【问题讨论】:

    标签: sql oracle plsql utl-file


    【解决方案1】:

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

    type ta_file is table of utl_file.file_type index by number(5);
    va_file ta_file;
    

    迭代行并将它们的 csv 行放入文件中(您必须通过串联替换 '{csv string from x}'

    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;
    

    关闭所有文件(遍历 va_file)

    for i in va_file.first .. va_file.last loop
      utl_file.fflush(va_file(i));
      utl_file.fclose(va_file(i));
    end loop;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      相关资源
      最近更新 更多