11

我有一个这样的脚本:

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

4

3 回答 3

9

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

COL ColumnName FORMAT A32000

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

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

于 2011-04-27T01:26:53.937 回答
2

你在 Windows 上吗?我遇到了同样的问题,其他两个答案都没有帮助我(直接,我必须再做一件事)。按照本文关于为 Windows 设置 SQL*Plus的建议,作者指出:

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

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

于 2011-11-04T19:35:49.760 回答
1

使用 getClobVal() 将输出转换为 clob 怎么样?

SELECT XMLELEMENT("element1",xmlelement("element2",xmlattributes(.....))).getClobVal()
  FROM --TABLENAME--
 WHERE --CONDITIONS--
于 2010-12-06T06:01:33.457 回答