2010-11-11 57 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个字符)并且解决了我的问题。