Gab*_*abe 152
您也可以使用以下内容,但它确实在字段之间引入了空格.
set colsep , -- separate columns with a comma
set pagesize 0 -- No header rows
set trimspool on -- remove trailing blanks
set headsep off -- this may or may not be useful...depends on your headings.
set linesize X -- X should be the sum of the column widths
set numw X -- X should be the length you want for numbers (avoid scientific notation on IDs)
spool myfile.csv
select table_name, tablespace_name
from all_tables
where owner = 'SYS'
and tablespace_name is not null;
Run Code Online (Sandbox Code Playgroud)
输出将如下:
TABLE_PRIVILEGE_MAP ,SYSTEM
SYSTEM_PRIVILEGE_MAP ,SYSTEM
STMT_AUDIT_OPTION_MAP ,SYSTEM
DUAL ,SYSTEM
...
Run Code Online (Sandbox Code Playgroud)
这比输入所有字段并用逗号连接它们要简单得多.如果需要,您可以使用简单的sed脚本来删除逗号之前出现的空格.
像这样的东西可能有用...(我的sed技能非常生疏,所以这可能需要工作)
sed 's/\s+,/,/' myfile.csv
Run Code Online (Sandbox Code Playgroud)
小智 33
我将此命令用于提取维度表(DW)数据的脚本.所以,我使用以下语法:
set colsep '|'
set echo off
set feedback off
set linesize 1000
set pagesize 0
set sqlprompt ''
set trimspool on
set headsep off
spool output.dat
select '|', <table>.*, '|'
from <table>
where <conditions>
spool off
Run Code Online (Sandbox Code Playgroud)
并且工作.我不使用sed格式化输出文件.
小智 21
我看到一个类似的问题......
我需要从SQLPLUS中删除CSV文件,但输出有250列.
我做了什么来避免恼人的SQLPLUS输出格式:
set linesize 9999
set pagesize 50000
spool myfile.csv
select x
from
(
select col1||';'||col2||';'||col3||';'||col4||';'||col5||';'||col6||';'||col7||';'||col8||';'||col9||';'||col10||';'||col11||';'||col12||';'||col13||';'||col14||';'||col15||';'||col16||';'||col17||';'||col18||';'||col19||';'||col20||';'||col21||';'||col22||';'||col23||';'||col24||';'||col25||';'||col26||';'||col27||';'||col28||';'||col29||';'||col30 as x
from (
... here is the "core" select
)
);
spool off
Run Code Online (Sandbox Code Playgroud)
问题是你会丢失列标题名称...
你可以添加这个:
set heading off
spool myfile.csv
select col1_name||';'||col2_name||';'||col3_name||';'||col4_name||';'||col5_name||';'||col6_name||';'||col7_name||';'||col8_name||';'||col9_name||';'||col10_name||';'||col11_name||';'||col12_name||';'||col13_name||';'||col14_name||';'||col15_name||';'||col16_name||';'||col17_name||';'||col18_name||';'||col19_name||';'||col20_name||';'||col21_name||';'||col22_name||';'||col23_name||';'||col24_name||';'||col25_name||';'||col26_name||';'||col27_name||';'||col28_name||';'||col29_name||';'||col30_name from dual;
select x
from
(
select col1||';'||col2||';'||col3||';'||col4||';'||col5||';'||col6||';'||col7||';'||col8||';'||col9||';'||col10||';'||col11||';'||col12||';'||col13||';'||col14||';'||col15||';'||col16||';'||col17||';'||col18||';'||col19||';'||col20||';'||col21||';'||col22||';'||col23||';'||col24||';'||col25||';'||col26||';'||col27||';'||col28||';'||col29||';'||col30 as x
from (
... here is the "core" select
)
);
spool off
Run Code Online (Sandbox Code Playgroud)
我知道它有点硬核,但它对我有用......
Bob*_*obC 19
如果你使用12.2,你可以简单地说
set markup csv on
Run Code Online (Sandbox Code Playgroud)
Lal*_*r B 16
使用较新版本的客户端工具,可以使用多种选项来格式化查询输出.其余的是将其假脱机到文件或将输出保存为文件,具体取决于客户端工具.以下是一些方法:
使用SQL*Plus命令,您可以格式化以获得所需的输出.使用SPOOL将输出假脱机到文件.
例如,
SQL> SET colsep ,
SQL> SET pagesize 20
SQL> SET trimspool ON
SQL> SET linesize 200
SQL> SELECT * FROM scott.emp;
EMPNO,ENAME ,JOB , MGR,HIREDATE , SAL, COMM, DEPTNO
----------,----------,---------,----------,---------,----------,----------,----------
7369,SMITH ,CLERK , 7902,17-DEC-80, 800, , 20
7499,ALLEN ,SALESMAN , 7698,20-FEB-81, 1600, 300, 30
7521,WARD ,SALESMAN , 7698,22-FEB-81, 1250, 500, 30
7566,JONES ,MANAGER , 7839,02-APR-81, 2975, , 20
7654,MARTIN ,SALESMAN , 7698,28-SEP-81, 1250, 1400, 30
7698,BLAKE ,MANAGER , 7839,01-MAY-81, 2850, , 30
7782,CLARK ,MANAGER , 7839,09-JUN-81, 2450, , 10
7788,SCOTT ,ANALYST , 7566,09-DEC-82, 3000, , 20
7839,KING ,PRESIDENT, ,17-NOV-81, 5000, , 10
7844,TURNER ,SALESMAN , 7698,08-SEP-81, 1500, , 30
7876,ADAMS ,CLERK , 7788,12-JAN-83, 1100, , 20
7900,JAMES ,CLERK , 7698,03-DEC-81, 950, , 30
7902,FORD ,ANALYST , 7566,03-DEC-81, 3000, , 20
7934,MILLER ,CLERK , 7782,23-JAN-82, 1300, , 10
14 rows selected.
SQL>
Run Code Online (Sandbox Code Playgroud)
或者,您可以在SQL Developer中使用新提示./*csv*/
/*csv*/
Run Code Online (Sandbox Code Playgroud)
例如,在我的SQL Developer版本3.2.20.10中:

现在您可以将输出保存到文件中.
在SQL Developer 4.1版中新增,使用以下内容就像sqlplus命令一样运行并作为脚本运行.不需要查询中的提示.
SET SQLFORMAT csv
Run Code Online (Sandbox Code Playgroud)
现在您可以将输出保存到文件中.
Doc*_*Doc 11
我知道这是一个旧线程,但是我注意到没有人提到下划线选项,它可以删除列标题下的下划线.
set pagesize 50000--50k is the max as of 12c
set linesize 10000
set trimspool on --remove trailing blankspaces
set underline off --remove the dashes/underlines under the col headers
set colsep ~
select * from DW_TMC_PROJECT_VW;
Run Code Online (Sandbox Code Playgroud)
这很粗糙,但是:
set pagesize 0 linesize 500 trimspool on feedback off echo off
select '"' || empno || '","' || ename || '","' || deptno || '"' as text
from emp
spool emp.csv
/
spool off
Run Code Online (Sandbox Code Playgroud)
您可以显式格式化查询以生成带有以下内容的分隔字符串:
select '"'||foo||'","'||bar||'"'
from tab
Run Code Online (Sandbox Code Playgroud)
并根据需要设置输出选项.作为一个选项,SQLPlus上的COLSEP变量将允许您生成分隔文件,而无需显式生成字段连接在一起的字符串.但是,您必须在可能包含嵌入逗号字符的任何列上的字符串周围加引号.