Oracle Spool命令:不将SQL语句输出到文件
我想输出一个查询到一个CSV文件,并使用以下作为一个小测试Oracle Spool命令:不将SQL语句输出到文件,oracle,oracle-sqldeveloper,Oracle,Oracle Sqldeveloper,我想输出一个查询到一个CSV文件,并使用以下作为一个小测试 spool c:\test.csv select /*csv*/ username, user_id, created from all_users; spool off; 但是输出的第一行是实际的select语句 > select /*csv*/ username user_id created from all_users USERNAME USER_ID CREATED REPORT 52 11-
spool c:\test.csv
select /*csv*/ username, user_id, created from all_users;
spool off;
但是输出的第一行是实际的select语句
> select /*csv*/ username user_id created from all_users
USERNAME USER_ID CREATED
REPORT 52 11-Sep-13
WEBFOCUS 51 18-Sep-12
有没有办法防止这种情况?我试着开始思考这样做可能会成功,但没有改变。我正在使用SQLDeveloper作为脚本运行
谢谢
Bruce不幸的是,SQL开发人员没有完全遵守
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*Plus的行为是有意的;为了隐藏查询文本,您还需要在那里运行一个带有
@
的脚本 您可以使用结果格中的导出选项直接导出查询结果。
此导出具有多种导出选项。我认为这会起作用。在TOAD或SQL DEVELOPER中执行查询
---select /*csv*/ username, user_id, created from all_users;
以.SQL格式保存在“C”驱动器中
执行命令
---- set serveroutput on
spool y.csv
@c:\x.sql
spool off;
我的shell脚本调用sql文件并执行它。spool输出在开始处有SQL查询,后面是查询结果 这并没有解决我的问题:
set echo off
set verify off
这解决了我的问题:
set echo off
set verify off
仅限那些偶然发现这一点的人(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
sqlplus-s/as sysdba 2>&1>/dev/null可能重复的设置验证偏移回显偏移页面大小0 spool c:\test.csv select/*csv*/username,user\u id,由所有用户创建代码>但仍显示select语句的第一行。SQL Developer中的脚本输出显示良好?明白了!感谢您的帮助此行为在4.2.0(EA2)中似乎有所改变;可能不再需要单独的脚本文件。当然,在最终发布之前可能会再次更改。。。。