在shell脚本中使用sqlplus格式化csv文件

在shell脚本中使用sqlplus格式化csv文件,sql,oracle,Sql,Oracle,我在shell脚本中使用sqlplus连接到DB和spool.csv文件 代码是:- sqlplus -s user/pass@db <<EOF> /dev/null 2>&1 SET COLSEP ',' SET FEEDBACK OFF SET TRIMSPOOL ON SET UNDERLINE OFF SET LINESIZE 10000 SET PAGESIZE 10000 spool customer.csv select * from cust

我在shell脚本中使用sqlplus连接到DB和spool.csv文件

代码是:-

sqlplus -s user/pass@db <<EOF> /dev/null 2>&1
SET COLSEP ','
SET FEEDBACK OFF
SET TRIMSPOOL ON
SET UNDERLINE OFF
SET LINESIZE 10000
SET PAGESIZE 10000

spool customer.csv 

select * from customer where cust_name='john';
spool off
EOF
输出:-

我得到了我的头球修剪像第一,第二,第四和第七列

预期产出:-

您需要告诉SQL*以及您希望列的宽度。假设我正确计算了每个标题的长度

column sys_creation_date format a17
column sys_update_date   format a15
column dl_service        format a10
column eff_date_time     format a13
不过,您可能更乐意切换到SQLcl,因为这样会更容易。只是

select /*csv*/ * from emp

您需要告诉SQL*以及您希望列的宽度。假设我正确计算了每个标题的长度

column sys_creation_date format a17
column sys_update_date   format a15
column dl_service        format a10
column eff_date_time     format a13
不过,您可能更乐意切换到SQLcl,因为这样会更容易。只是

select /*csv*/ * from emp


我们有任何选项可以设置所有列的格式吗?这里…设置格式只有在列数较少时才有帮助,如果我们有50-70列,那么这不是一个好主意。@罗杰-如果您使用的是SQL*Plus,并且希望确保列标题完全打印出来,则需要设置列的格式。是的,如果您的查询有70列,那么可能有70行格式。这就是为什么SQLcl通常是更好的选择,除非您出于某种原因与旧工具结合在一起。@JustinCave-sqlcli不需要使用/*csv*/指令。sqlplus至少在19c上也能处理它。@EdStevens-很有趣。我知道SQLDeveloper和SQLcl支持这一点。我不知道它已添加到SQL*Plus中。我们是否有任何选项来设置所有列的格式?这里…设置格式只有在列数较少时才有帮助,如果我们有50-70列,那么这不是一个好主意。@Roger-如果您使用SQL*Plus,并且希望确保列标题完全打印出来,您需要设置列的格式。是的,如果您的查询有70列,那么可能有70行格式。这就是为什么SQLcl通常是更好的选择,除非您出于某种原因与旧工具结合在一起。@JustinCave-sqlcli不需要使用/*csv*/指令。sqlplus至少在19c上也能处理它。@EdStevens-很有趣。我知道SQLDeveloper和SQLcl支持这一点。不知道它已添加到SQL*Plus。