Oracle假脱机到文件的最大列宽

时间:2010-11-11 16:14:37

标签: oracle sqlplus oracle-xml-db-repository

我有一个这样的脚本:

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在同一行中写入所有数据吗?

3 个答案:

答案 0 :(得分:6)

只需在SET命令后添加以下行:

COL ColumnName FORMAT A32000

其中ColumnName是SELECT语句中XML列的别名(您需要添加别名)。

这将设置该列的最大宽度,默认为2000个字符。请注意,虽然您可以将COL FORMAT设置为高达60000个字符,但实际上您使用sqlplus实际获得的最多是 32767 ,因为这是LINESIZE的上限。

答案 1 :(得分:2)

你在Windows上吗?我遇到了同样的问题,其他两个答案都没有帮助我(直接,我还要做一件事)。根据{{​​3}}的建议,作者注意到:

  

[note3] Set long big_number这样您就可以看到复杂触发器或视图的定义,或任何long或clob列中的文本。

我将我设为SET LONG 32000(我最长的一行超过2000个字符),这解决了我的问题。

答案 2 :(得分:0)

如何使用getClobVal()将输出转换为clob?

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