2014-09-24 65 views
0

我试图产生的shell脚本CSV文件了甲骨文SQLPLUS的,我得到头反复多次,也为空值在该行的末尾到来,如何生成sqlplus到csv文件?

echo "****************************************************************" 

echo "Started may at : " $(date +"%r") 

sqlplus -s ETLUSER/[email protected]//10.135.23.232:1521/ODS<<EOF >/dev/null 

SPOOL wfa_may.csv 

SELECT MAC_ADDRESS ||','|| 
CRM_BP_ID || ',' || 
EVENT_TIMESTAMP || ',' || 
ACCT_INPUT_OCTETS || ',' || 
ACCT_OUTPUT_OCTETS || ',' || 
ACCT_INPUT_PACKETS || ',' || 
ACCT_OUTPUT_PACKETS || ',' || 
ACCT_SESSION_TIME || ',' || 
NAS_IDENTIFIER || ',' || 
EXTRACTION_DATE || ',' || 
RECORD_DATE || ',' || 
LAST_MODIFIED_DATE || ',' || 
ETL_BATCH_ID || ',' || 
ETL_PROCESS_ID || ',' || 
RECORD_LOAD_TIMESTAMP FROM DBAS.S_WFA_ACCOUNTING_MSG where to_char(EVENT_TIMESTAMP,'MON') = 'MAY'; 

exit 

EOF 

echo "Ended may at : " $(date +"%r") 

echo "****************************************************************" 

从NAS_IDENTIFIER我不能够找到文件中显示的任何值。

任何人都可以帮助我怎么了吗?

+0

是否有其他列字符串中可能有逗号?他们不太可能从名字中得知,但可能会抛弃CSV。 (稍微好奇你为什么要假脱机,而不是将输出重定向到一个文件,而不是/ dev/null;但这并不是真正相关的,而且你知道你可以将你的select分成多行,以使它更易读,对吗?) – 2014-09-24 09:48:25

+1

标题是重复和换行符?设置TERMOUT关 组反馈关闭 组头 组验证过 组回波关闭 集LINESIZE 30000 集页面大小0 集trimspool在将这些帮助? – 2014-09-24 10:13:03

+0

['set pageize 0'将压制所有头文件](http://stackoverflow.com/a/22738117/266304),而不仅仅是重复的;你可以设置一个很大的数字来只看到一次。或者[创建你自己的](http://stackoverflow.com/a/23376028/266304)。您可能需要设置'linesize' - 编辑后我不确定您看到的是什么,例如如果数据包装到多行中,或者被截断。显示一些当前输出和来自表格的相应值可能会阐明。 – 2014-09-24 10:15:51

回答

0

二者必选其一set head off或脚本中的set pages 0

0

我得到头重复多次

设置需要linesize应该工作。无论如何,看看这个:

更新:我的建议

SET COLSEP , 
SET PAGESIZE 0 
SET LINESIZE 1000 
SET trimspool ON 

SPOOL "D:\EMP_DATA.csv" 

Select * 
From Scott.EMP 
/

SPOOL OFF 

而假脱机CSV文件的演示看起来像这样:

enter image description here

+2

你的意思是设置所需的页面大小,而不是lineize?这不会影响标题重复 - 只是如果他们分开线路?而'colsep'没有做任何事情,因为它全部连接成一列。如果你只是使用它,保留单独的列,那么它们仍然被填充到相同的宽度,这看起来很奇怪 - 我认为如果在Excel中打开该文件,则会保留填充,这可能并不理想。 – 2014-09-24 10:55:16

+0

@Alex,我更新了答案以表明我的意思。 – 2014-09-24 11:42:48

+0

好的,但我的观点仍然存在 - 当Excel打开文件时,字符串值(但不是日期和数字)仍然被填充,所以它具有'SMITH'而不是'SMITH'。这可能或可能不重要。我个人更喜欢连接,但YMMV。 – 2014-09-24 11:56:53