如何使用plsql在不同列中显示CSV数据?

问题描述 投票:0回答:2

我已经编写了sql以生成CSV格式的输出数据。我已经使用了后台打印来以CSV格式生成。

SET LINESIZE 1000 TRIMSPOOL ON FEEDBACK OFF

SPOOL E:\oracle\extract\emp2.csv

  SELECT emp_id,
           emp_name

    FROM   offc.employee
    ORDER BY emp_id;

SPOOL OFF

SET PAGESIZE 14

输出到位。输出正确生成,但是当我看到CSV文件时,所有数据都进入CSV的same column A

enter image description here

我想要emp_id in column Aemp_name in columnB。为什么它们要进入同一列?这是什么问题?

oracle csv plsql oracle11g toad
2个回答
0
投票

谈论我自己的经验:尽管Excel 知道如何打开CSV文件,但是它有点愚蠢,并且仍然将所有内容都放在第一列中。因此,我更喜欢使用列分隔符来创建TXT文件(所以-是的,它基本上is是逗号分隔的文件(或您选择的任何分隔符))。

例如:

SQL> set pagesize 100
SQL> set linesize 100
SQL> set colsep ";"
SQL>
SQL> spool emp.txt
SQL>
SQL> select * from emp;

     EMPNO;ENAME     ;JOB      ;       MGR;HIREDATE;       SAL;      COMM;    DEPTNO
----------;----------;---------;----------;--------;----------;----------;----------
      7369;SMITH     ;CLERK    ;      7902;17.12.80;       800;          ;        20
      7499;ALLEN     ;SALESMAN ;      7698;20.02.81;      1600;       300;        30
      7521;WARD      ;SALESMAN ;      7698;22.02.81;      1250;       500;        30
      7566;JONES     ;MANAGER  ;      7839;02.04.81;      2975;          ;        20
      7654;MARTIN    ;SALESMAN ;      7698;28.09.81;      1250;      1400;        30
      7698;BLAKE     ;MANAGER  ;      7839;01.05.81;      2850;          ;        30
      7782;CLARK     ;MANAGER  ;      7839;09.06.81;      2450;          ;        10
      7788;SCOTT     ;ANALYST  ;      7566;09.12.82;      3000;          ;        20
      7839;KING      ;PRESIDENT;          ;17.11.81;      5000;          ;        10
      7844;TURNER    ;SALESMAN ;      7698;08.09.81;      1500;         0;        30
      7876;ADAMS     ;CLERK    ;      7788;12.01.83;      1100;          ;        20
      7900;JAMES     ;CLERK    ;      7698;03.12.81;       950;          ;        30
      7902;FORD      ;ANALYST  ;      7566;03.12.81;      3000;          ;        20
      7934;MILLER    ;CLERK    ;      7782;23.01.82;      1300;          ;        10

14 rows selected.

SQL> spool off;

现在,启动Excel并转到打开;选择“所有文件”(即不仅是Excel类型的文件),这样您会看到列出的emp.txt。 Excel然后-在其“文本导入向导”中-询问您文件的类型(选择定界

设置分隔符(在我们的示例中为分号

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLmltZ3VyLmNvbS9jSVgxMzVBLnBuZyJ9”>

并-打开文件:

现在所有内容都在其自己的列中。


0
投票

[这里,问题是空格被认为是您的列数据的separator,而excel无法分隔space separated的列值。

您可以将colsep属性与其他属性一起使用,如下所示:

set colsep , -- defines column data separator
set pagesize 14 -- defines size of the page. Keep it large so that header is not repeated
set trimspool on -- remove trailing blanks
set lines 1000 -- linesize should be more than sum of width of the all columns
set FEEDBACK OFF -- removes the comment at the end of the data

SPOOL E:\oracle\extract\emp2.csv

  SELECT emp_id,
           emp_name

    FROM   offc.employee
    ORDER BY emp_id;

SPOOL OFF

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.