Максимальная ширина столбца в Oracle spool to file

У меня есть script, как это:

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

Просто добавьте следующую строку сразу после команд SET:

COL ColumnName FORMAT A32000

где ColumnName является псевдонимом для столбца XML в инструкции SELECT (вам нужно добавить псевдоним).

Это устанавливает максимальную ширину для этого столбца, которая по умолчанию равна 2000 символам. Обратите внимание, что, хотя вы можете установить COL FORMAT как 60000 символов, большинство из них на самом деле когда-либо попадет на одну строку с sqlplus, это 32767, так как это верхний предел для LINESIZE.

Ответ 2

Вы в Windows? У меня была такая же проблема, и ни один из двух ответов не помог мне (прямо, я должен был сделать еще одну вещь). Следуя рекомендациям этой статьи по настройке SQL * Plus для Windows, автор отмечает:

[note3] Set long big_number, чтобы вы могли увидеть определение сложного триггера или представления или текст в любом длинном столбце или столбце.

Я установил мой как SET LONG 32000 (моя самая длинная строка была чуть более 2000 символов), и это решило проблему для меня.

Ответ 3

Как использовать getClobVal() для преобразования вывода в clob?

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