Hi正在使用下面的shell脚本从oracle数据库创建csv
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export PATH=$PATH:$ORACLE_HOME/bin
sqlplus -s user1/user1<<!
Spool on
set heading off
SET FEEDBACK OFF
set wrap off
set colsep ,
SET LINESIZE 200
set trims on
Spool /home/ist/username.csv
select 'username','userid' from dual;
select username,userid from users;
Spool off
EXIT
!
我得到了如下输出
如您所见,在第一行和第三行都有空行,但希望文件没有空行。任何帮助都将不胜感激。
发布于 2016-02-16 16:10:53
使用
SET PAGESIZE 0
命令以避免空行。这也会取消列标题,因此可以删除
SET HEADING OFF
命令
SPOOL on
没有意义,因为它在名为on.lst
的文件中启动假脱机。所以也删除这个命令。
如果要显示具有列名的标题,可以尝试以下设置
set HEADING ON
SET FEEDBACK OFF
set WRAP OFF
set COLSEP ,
SET LINESIZE 32767
set NEWPAGE none
set UNDERLINE OFF
set TRIMSPOOL ON
set TRIMOUT ON
set PAGESIZE 50000
标题是默认的,所以你不能设置它。它允许在select启动时显示列名。underline off
会取消“--”列名与select数据之间的行。pages 50000
将页面大小设置为其最大值(Oracle11.2)。linesize 32767
将行大小设置为其最大值(Oracle11.2)。newpage none
是必要的,以抑制这个空行在一个页面的开头,这是您的帖子的主要关注事项。所有这些都可以在加命令参考中找到。
termout off
参数只取消使用@或@命令执行的脚本创建的输出。它不会被SQL*plus控制台中输入的命令取消。如果您使用
sqlplus user/passw@connect <<!
...
!
您可以使用shell语言的这里文档语法来模拟交互输入。因此,将sql命令放在脚本中,例如script.sql
,然后执行
sqlplus user/passw@connect @script.sql
然后termout off
将抑制终端输出。
而不是
colsep ,
select username,userid
...
它返回的内容如下
user1 , 14
nextuser , 236
myuser , 11
...
您可以使用保持COLSEP不变并执行
select username||','||userid
...
以获得以下输出
user1,14
nextuser,236
myuser,11
...
发布于 2016-02-16 14:19:05
set trimspool on
这个会对你有用的
发布于 2016-02-16 15:05:57
把这个写在你的剧本上
sed -i '/^\s*$/d'/home/ist/username.csv
https://stackoverflow.com/questions/35434513
复制相似问题