我正在尝试使用一些替换变量将结果直接压缩到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)
谢谢!
答案 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语句后没有分号。