【问题标题】:How to generate .csv file from oracle table data?如何从 oracle 表数据生成 .csv 文件?
【发布时间】:2022-03-17 21:04:50
【问题描述】:

我使用以下查询生成了一个 csv 文件,但所有列数据都在 csv 文件的一列中。请帮我将这些列数据分开。

create or replace procedure csv_generate as
CURSOR c1 is SELECT * FROM emp;
v1 c1%rowtype;
z1 VARCHAR2(2000);
z2 VARCHAR2(2000);
f1 utl_file.file_type;
BEGIN
FOR i IN c1
loop
--play(i.ename);
f1:=utl_file.fopen('TEST_DIR1','out.dbf','W');
z1:=i.empno||' '||i.ename||'    '||i.JOB||'   '||i.sal||'  '||i.deptno;
z2:=z2||chr(10)||z1;
utl_file.put_line(f1,z2);
utl_file.fclose(f1);
END loop;
--utl_file.put_line(f1,z2);
END;

【问题讨论】:

  • 您使用空格作为分隔符;要构建 CSV,您应该添加一个分隔符,比如逗号,而不是空格。此外,您每行打开和关闭文件一次,而您最好在循环之外执行此操作。甚至,你不是在变量 z2 中连接了太多的内容吗?
  • 好的,谢谢 Aleksej。但是如何获取csv第二列中的ename数据
  • 如果您使用空格作为分隔符,您将始终只有一列。
  • 那么,我应该用什么来分隔列?
  • 这取决于您的要求。通常的分隔符是逗号,但你可以使用分号、管道,任何你需要的东西

标签: plsql utl-file


【解决方案1】:

逗号分隔符有效。

create or replace procedure text_generate as
CURSOR c1 is SELECT * FROM emp;
v1 c1%rowtype;
z1 VARCHAR2(2000);
z2 VARCHAR2(2000);
f1 utl_file.file_type;
BEGIN
f1:=utl_file.fopen('TEST_DIR1','out.xls','W');
FOR I IN C1
loop
z1:=i.empno||','||i.ename||','||i.JOB||','||i.sal||','||i.deptno;
Z2:=Z2||CHR(10)||Z1;
END LOOP;
UTL_FILE.PUT_LINE(F1,Z2);
utl_file.fclose(f1);
END;

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 2014-06-14
    • 2014-01-08
    • 2022-01-15
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多