假脱机命令:不要将SQL语句输出到文件

时间:2013-09-26 16:42:52

标签: oracle oracle-sqldeveloper

我想将查询输出到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作为脚本运行。

由于 布鲁斯

6 个答案:

答案 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语句的关键。