使用变量从SQL Developer的假脱机输出中删除查询

时间:2014-07-24 23:29:16

标签: sql oracle csv oracle-sqldeveloper sqlplus

我正在尝试使用一些替换变量将结果直接压缩到CSV。我有这个问题:

SET echo off
set feedback off
set pagesize 0
set termout off

define startdate='12-JAN-14'
define enddate='01-JUN-14'
define vpath=C:\14-0724_Spool testing\'
define dt='60_testupdate_subvar'
define ext='.csv'

SPOOL &&vpath&&dt&&ext

SELECT /*csv*/ table1.SOURCE_DMS_ID,
  COUNT(table1. AMOUNT)
FROM table1
WHERE 
table1.DATE BETWEEN   to_date('&&startdate') and to_date('&&enddate')
--AND table1_DATE BETWEEN   '01-JAN-14' and '31-JAN-14'

GROUP BY table1_DIM.SOURCE_DMS_ID;

...使用此脚本调用:

@"\Results_Feed_Spooled.sql"

我特意用脚本调用它(以及SET其他各种项目),以便生成的CSV文件不会在文件中包含查询。但是,选择查询DOES出现在CSV文件中。有趣的是,当我将where子句切换为实际日期(请参阅查询的注释部分)而不是对替换变量的引用时,查询不会出现在生成的CSV中。

为什么在WHERE子句中使用变量而不是实际值会导致查询包含在结果文件中?我怎么能纠正这个?对于我能够使用变量的脚本的有用性非常重要。

(SQL开发人员版本4.0.0.13)

谢谢!

2 个答案:

答案 0 :(得分:3)

使用-s。 -s标志表示无声,完整的bash脚本将如下所示:

#!/bin/bash
sqlplus -s /nolog << EOF
CONNECT USER/PASSWORD
set echo off
set verify off
set colsep ","
set linesize 9999
set trimout on
set trimspool on
set heading on
set pagesize 0 embedded on
set wrap off
set feedback off
set newpage 0
set arraysize 5000
set serveroutput off
spool "/tmp/exported_date/table.csv"
SELECT * FROM TABLE;
spool off;
EXIT;
EOF

答案 1 :(得分:1)

假设SQL_Developer符合sqlplus,首先尝试添加“SET VERIFY OFF”。如果这不起作用,您还可以尝试在查询后放置假脱机,如下例所示:

set verify off
define x = 'X'
select * from dual where '&x' = 'X'

spool x.out

/

spool off

注意SELECT之后的空白行,以及SELECT语句后没有分号。