Максимальная ширина столбца в спуле Oracle в файл

У меня есть такой скрипт:

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 ответа

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

COL ColumnName FORMAT A32000

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

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

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

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

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

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

SELECT XMLELEMENT("element1",xmlelement("element2",xmlattributes(.....))).getClobVal()
  FROM --TABLENAME--
 WHERE --CONDITIONS--
Другие вопросы по тегам