Максимальная ширина столбца в спуле Oracle в файл - PullRequest
10 голосов
/ 11 ноября 2010

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

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 ]

6 голосов
/ 27 апреля 2011

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

COL ColumnName FORMAT A32000

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

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

2 голосов
/ 04 ноября 2011

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

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

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

0 голосов
/ 06 декабря 2010

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

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