2015-05-28 49 views
0

我最近創建了一個使用sqlplus自動化提取的cron。我的.sh如下:CSV提取問題

alter session set nls_numeric_characters= '.,' ; 
alter session set nls_date_format='DD-MM-YYYY HH24:MI:SS'; 
set colsep ";" 
SET TRIMSPOOL ON 
SET HEADING OFF 
set echo off 
SET FEEDBACK OFF 
set verify off 
set linesize 32767 
set pagesize 0 
set pause off 
set termout off 
set newp none 
set space 0 
set wrap off 
set trim on 
spool /data/Tools/Extract_W7/w7_errors.csv 
Select HOST ||';'|| PORT ||';'|| PID ||';'|| OPX2DATE ||';'|| OPX2USER ||';'|| IP ||';'|| INFO from V_W7_ERRORS where OPX2DATE > SYSDATE - 100; 

spool off; 
exit; 

問題是,在我的摘錄中有一列「信息」與特定的符號,如;/@#,..所以我認爲它混淆了使用的colsep「;」與;在細胞中。

我嘗試過不同的字符,但每次我遇到同樣的問題(在同一個單元格中連接了很多行),因爲我使用的字符已經在我的Info列中使用。

任何想法?

回答

1

裹在雙引號列內容的CSV,通過連接這些查詢:

Select HOST ||';'|| PORT ||';'|| PID ||';'|| OPX2DATE ||';'|| OPX2USER 
    ||';'|| IP ||';"'|| INFO || '"' 
from V_W7_ERRORS where OPX2DATE > SYSDATE - 100; 

最重要的一點是';"'|| INFO || '"' which puts a「`的信息內容兩側;注意雙引號。本身在單引號內,所以它的字符串,而不是看作一個帶引號的標識符的一部分輸出

輸出將如下所示:

...;192.168.0.1;"Some info; embedded semicolon is OK now" 

在Excel中打開文件時,不會將雙引號封閉部分中的任何分號視爲列分隔符,就像文本是單元格值的一部分一樣。

您可以用雙引號括起任意數量的列 - 任何可能帶有分號的列。您可能需要將它們全部作爲預防措施。

+0

我的請求在INFO後不包含雙引號,對不起,我犯了一個粘貼錯誤。 – Faza01

+0

我的問題已解決,顯然這是一個Excel解釋的問題,當我首先從文本打開數據 - 導入時,我沒有問題。 – Faza01

+0

謝謝你的回答Alex。 – Faza01