如何使用 pl sql 在不同的列中显示 CSV 中的数据?

how to show data in CSV in different colums using plsql?

我已经编写 sql 以 CSV 格式生成输出数据 format.I 已使用 spool 以 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

输出正在进入 location.The 输出已正确生成,但是当我看到 CSV 文件时,所有数据都以 CSV 格式进入 same column A

我想要 emp_id in column Aemp_name in columnB。为什么他们出现在同一列?这里有什么问题?

此处,问题是 space 被视为列数据的 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

干杯!!

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

例如:

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 并转到 打开;选择 "All files"(即不仅是 Excel 类型的文件),这样您就会看到 emp.txt 列出。 Excel 然后 - 在它的 "Text Import Wizard" - 询问你它是哪种文件(选择 delimited):

设置分隔符(在我们的例子中是分号

并且 - 打开文件:

所有内容现在都在自己的专栏中。

What is the problem here?

Excel 期望逗号分隔值文件的列中的值以逗号分隔。您的查询输出两列数据,但不包含明确的分隔符。因此,当 Excel 读取文件时,它找不到任何逗号,因此它呈现单列数据。

有多种方法可以解决这个问题。一种是在查询中包含您自己的显式分隔符:

SELECT emp_id
      || ', ' ||
      emp_name
FROM   offc.employee
ORDER BY emp_id;

另一种是使用the SQL*Plus colsep command格式化文件中的输出。第三种选择是使用像 SQL Developer 这样的工具,它的导出功能可以为我们处理所有这些。