如何使用 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 A
和 emp_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 这样的工具,它的导出功能可以为我们处理所有这些。
我已经编写 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 A
和 emp_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 这样的工具,它的导出功能可以为我们处理所有这些。