17

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

谢谢布鲁斯

4

6 回答 6

25

不幸的是,SQL Developer 并没有完全遵守set echo off在 SQL*Plus 中会(似乎)解决这个问题的命令。

我为此找到的唯一解决方法是将您正在执行的操作保存为脚本,例如test.sql

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 论坛上进行了一些搜索,找到了相同的解决方案,开发团队认为模仿 SQL*Plus 的行为是有意的行为;您还需要在@那里运行脚本以隐藏查询文本。

于 2013-09-26T16:55:53.653 回答
3

我的 shell 脚本调用 sql 文件并执行它。假脱机输出的开头是 SQL 查询,然后是查询结果。

这并没有解决我的问题:

set echo off

这解决了我的问题:

set verify off
于 2017-08-04T13:25:02.383 回答
1

仅适用于偶然发现此问题的任何人(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 语句的关键。

于 2021-05-21T08:45:42.897 回答
0
set echo off
spool c:\test.csv 
select /*csv*/ username, user_id, created from all_users;
spool off;
于 2013-09-26T16:50:56.823 回答
0

您可以使用结果 grig 中的导出选项直接导出查询结果。此导出具有多种导出选项。我认为这会奏效。

于 2013-11-15T11:40:13.487 回答
0

在 TOAD 或 SQL DEVELOPER 中执行查询

---select /*csv*/ username, user_id, created from all_users;

以.SQL格式保存在“C”盘

--- x.sql

执行命令

---- set serveroutput on
     spool y.csv
     @c:\x.sql
     spool off;
于 2014-11-23T21:26:36.000 回答