2010-08-04 54 views
0

我有一個查詢連接(由||手動)一些列,其中之一是一個XMLTYPE字段(調用getClobVal())。如果我用sqlplus與下列選項後臺查詢輸出設置:假脫機查詢包含一個XMLTYPE列使用sqlplus

set long 30000; 
set pagesize 0; 
set feedback off; 

我得到的所有內容,根據需要,但與CR/LF的後80個字符,第一行的內容後,用20個字符60個字符停止的空格,其餘行的內容在40個字符後面停留40個字符的空格。

如果我添加:

set linesize 120; 

獲得帶有額外的空格(每行剩餘行第1行的空白的60個字符,80個字符的空白的)

相同的結果的實際內容後是否可以使用sqlplus和spooling爲包含大量文本的查詢結果創建csv輸出文件?

我認識到,通過後臺做這並不是理想的方法,但我需要能夠在可以在命令行或通過批處理文件執行的方法來創建此csv文件。

有什麼建議嗎?

回答

0

誰是有用sqlplus更有經驗的同事,來到了這給了我,我一直在尋找的結果確定下列塊:

set pagesize 0 echo off; 
SET LINESIZE 30000 LONG 30000 LONGCHUNKSIZE 30000 Trimspool on; 
+0

你應該接受你的答案,因爲它解決了你的問題 – APC 2010-08-05 15:25:47

+0

StackOverflow不允許我接受我自己的答案,直到一天過去。 – copaX 2010-08-05 16:10:34

1

我們可以將線條大小設置爲一個很大的數字。雖然我懷疑大多數操作系統都支持高達32K,但操作系統有多大依賴。這是從Windows ...

SQL> set linesize 10000 
SQL> set linesize 32767 
SQL> set linesize 999999 
SP2-0267: linesize option 999999 out of range (1 through 32767) 
SQL> 

如果你有XML文本比這更長,那麼你是運氣不好。

你不說你爲什麼使用SQL * Plus。這是因爲您希望在客戶端而不是數據庫服務器上輸出,還是因爲您不知道用其他方式寫出文件?

如果您可以寫入服務器有替代方案。 UTL_FILE仍然有32767個字符的限制LINESIZE,但至少我們已經做了一些編程巫術,以確保該行沒有得到在標籤中旬剁掉。

但可能是最好的解決辦法是使用DBMS_XSLPROCESSOR.CLOB2FILE()這是的XMLDB功能的一部分。


爲了完整通過和平與安全理事會的同事推薦相關的SQL * Plus的參數是:

PAGE - 此設置爲零抑制頭和防止頁面輸出
ECHO拋出 - 控制是否將SQL語句當腳本運行

兩個PAGE' and ECHO`被設置以避免在輸出無關的文本顯示。出於同樣的原因如下參數通常設定

FEEDBACK - 控制的行數是否在查詢

LONG的端diplayed - 控制長文本的量顯示
LONGCHUNKSIZE - 控制的LONG量列前顯示文本換
TRIMSPOOL - 刪除空白哪些權利焊盤行至LINESIZE

LONGLONGCHUNKSIZE shoudl被設置以相同的值獲得整列顯示在一條輸出線上。

所有這些參數和更多內容都在the documentation中解釋。

+0

對不起,是的,那是因爲輸出需要一個客戶端上,而不是數據庫服務器本身。 – copaX 2010-08-05 13:38:05

+0

@copaX - 在這種情況下,您僅限於LINESIZE允許的32K。 – APC 2010-08-05 13:49:44