2010-11-11 33 views
10

我有這樣的腳本:最大列寬卷軸到文件

SET ECHO OFF 
SET FEEDBACK OFF 
SET VERIFY OFF 
SET HEADING OFF 
SET TERMOUT OFF 
SET TRIMOUT ON 
SET TRIMSPOOL ON 
SET WRAP OFF 
SET LINESIZE 32000 
SET LONG 32000 
SET LONGCHUNKSIZE 32000 
SET SERVEROUT ON 

SPOOL C:\Export.txt 

SELECT XMLELEMENT("element1",xmlelement("element2",xmlattributes(.....))) 
    FROM --TABLENAME-- 
WHERE --CONDITIONS-- 

輸出應該包含與內部的複雜的XML行的列表的文件,但是,當生成的XML的長度比2000年長,SQLPlus修剪到2000年,然後轉到下一行。

有一種方法可以強制SQLPlus在同一行中寫入所有數據?

+1

這應該是好的。你在用什麼查看文件 - 你的編輯器是否有行長限制?我想知道假脫機程序實際上是否正常,但當您嘗試查看它時,它只會看起來被截斷。 – 2010-11-11 17:24:40

回答

0

如何使用getClobVal()將輸出轉換爲clob?

SELECT XMLELEMENT("element1",xmlelement("element2",xmlattributes(.....))).getClobVal() 
    FROM --TABLENAME-- 
WHERE --CONDITIONS-- 
5

只需添加以下行SET命令之後:

COL ColumnName FORMAT A32000 

其中的ColumnName是在你的SELECT語句的別名XML列(你需要添加一個別名)。

這設置該列的最大寬度,默認情況下爲2000個字符。請注意,儘管您可以將COL FORMAT設置爲高達60000個字符,但您實際上使用sqlplus獲得的最多線路數爲,因爲這是LINESIZE的上限。

+0

當你[使用'DBMS_METADATA.GET_DDL()'](http://dba.stackexchange.com/a/19506/2660)腳本化DDL時,這非常有用。 – 2012-06-20 15:43:12

2

你在Windows上嗎?我遇到了同樣的問題,其他兩個答案都沒有幫助我(直接,我不得不再做一件事)。繼this article on setting up SQL*Plus for Windows建議筆者注:

[注3] Set long big_number所以你可以看到一個複雜的觸發器或視圖,或文本的定義任何長或CLOB列。

我把我的地址設置爲SET LONG 32000(我最長的一行有點超過2000個字符)並且解決了我的問題。