我想将查询输出到CSV文件,并使用以下作为小测试;
spool c:\test.csv
select /*csv*/ username, user_id, created from all_users;
spool off;
但输出的实际选择状态为第一行
> select /*csv*/ username user_id created from all_users
USERNAME USER_ID CREATED
REPORT 52 11-Sep-13
WEBFOCUS 51 18-Sep-12
有没有办法防止这种情况发生?我试过SET Heading Off认为可能会这样做,但它没有改变。我正在使用SQL Developer作为脚本运行。
由于 布鲁斯
答案 0 :(得分:23)
不幸的是,SQL Developer并没有完全遵守set echo off
命令,该命令会在SQL * Plus中解决这个问题。
我发现的唯一解决方法是将您正在做的事情保存为脚本,例如test.sql
with:
set echo off
spool c:\test.csv
select /*csv*/ username, user_id, created from all_users;
spool off;
然后从SQL Developer中只调用该脚本:
@test.sql
将其作为脚本运行(F5)。
保存为脚本文件对于除了即席查询之外的其他任何事情都不应该太困难;并使用@
运行它而不是打开脚本并直接运行它只是有点痛苦。
一些搜索在SQL Developer forum上找到了相同的解决方案,开发团队认为这是模仿SQL * Plus所做的有意行为;您还需要在@
运行脚本以隐藏查询文本。
答案 1 :(得分:1)
set echo off
spool c:\test.csv
select /*csv*/ username, user_id, created from all_users;
spool off;
答案 2 :(得分:1)
我的shell脚本调用sql文件并执行它。假脱机输出在开头有SQL查询,后跟查询结果。
这并没有解决我的问题:
set echo off
这解决了我的问题:
set verify off
答案 3 :(得分:0)
您可以在结果grig中直接导出带导出选项的查询结果。 此导出具有各种导出选项。我认为这会奏效。
答案 4 :(得分:0)
在TOAD或SQL DEVELOPER中执行查询
---select /*csv*/ username, user_id, created from all_users;
在" C"中保存.SQL格式驱动
--- x.sql
执行命令
---- set serveroutput on
spool y.csv
@c:\x.sql
spool off;
答案 5 :(得分:0)
仅适用于偶然发现此问题的任何人(7 年以上)...
这对我有用……使其适应您调用 sqlplus 的方式。
sqlplus -s / as sysdba 2>&1 > /dev/null <<EOF
whenever sqlerror exit sql.sqlcode;
set echo off
set verify off
set feedback off
set term off
set head off
set pages 1000
set lines 200
spool /tmp/whatever.output
### Your_SQL_statement_here ###
example: select sysdate from dual;
example: select * from V\$LOGFILE;
spool off
EOF
这里的-s标志是运行脚本时不显示SQL语句的关键。