您正在使用以下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
!
我得到以下输出
你可以看到第一排和第三排有空行 但我期待没有空行的文件。 任何帮助将不胜感激。
答案 0 :(得分:1)
使用
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
'标题'是默认值,因此您不能设置它。它可以在选择开始时显示列名。 underline off
禁止列名和选择数据之间的“---”行。 pages 50000
将pagesize设置为其最大值(Oracle 11.2)。 linesize 32767
将linesize设置为其最大值(Oracle 11.2)。 newpage none
必须在页面开头抑制此空行,这是您发布的主要问题。
所有这些都可以在SQL*Plus Command Reference
termout off
参数仅抑制由使用@或@@命令执行的脚本创建的输出。它不会被SQL * plus控制台中输入的命令抑制掉。如果你使用
sqlplus user/passw@connect <<!
...
!
您使用shell语言的here-document语法来模拟交互式输入。所以把你的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
...
答案 1 :(得分:0)
set trimspool on
这对你有用
答案 2 :(得分:0)
将此放在您的脚本上
sed -i '/^\s*$/d'/home/ist/username.csv
答案 3 :(得分:0)
使用
删除/home/ist/username.csv
中没有,
的行
grep "," /home/ist/username.csv > /home/ist/username2.csv
# or
sed -i '/^[^,]*$/ d' /home/ist/username.csv
答案 4 :(得分:0)
SQLPLUS 12.2具有输出CSV的功能,但您需要配置一些设置以删除其上的空白行。这是我的方法
SET HEADING OFF;
SET PAGES 0;
SET SQLBLANKLINES ON;
set echo off;
set autotrace off;
set feedback off;
SET TRIM ON;
SET MARKUP CSV ON DELIMITER | QUOTE OFF;