2010-11-11 14 views
10

Tengo un script como el siguiente:Max ancho de columna en Oracle en cola para presentar

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-- 

El resultado debe ser un archivo que contiene una lista de filas con el complejo XML dentro, pero cuando la longitud del XML generado es más largo que 2000, SQLPlus recorta a 2000 y pasa a la siguiente línea.

¿Hay alguna forma de forzar a SQLPlus a escribir todos los datos en la misma línea?

+1

Eso debería estar bien. ¿Con qué estás viendo el archivo? ¿Tiene tu editor un límite de longitud de línea? Me pregunto si el carrete está realmente bien, pero se ve truncado cuando intentas verlo. –

Respuesta

0

¿Qué le parece usar getClobVal() para convertir la salida en un clob?

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

Apenas añada la siguiente línea justo después de los comandos SET:

COL ColumnName FORMAT A32000 

donde ColumnName es un alias para la columna XML en su instrucción SELECT (que tendrá que añadir un alias).

Esto establece el ancho máximo para esa columna, que es 2000 caracteres por defecto. Tenga en cuenta que si bien puede establecer COL FORMAT de hasta 60000 caracteres, lo máximo que obtendrá en una línea con sqlplus es , ya que este es el límite superior para LINESIZE.

+0

Esto es muy útil cuando está [scripting DDL usando 'DBMS_METADATA.GET_DDL()'] (http://dba.stackexchange.com/a/19506/2660). –

2

¿Estás en Windows? Estaba teniendo el mismo problema y ninguna de las otras dos respuestas me ayudó (directamente, tuve que hacer una cosa más). Siguiendo el consejo de this article on setting up SQL*Plus for Windows el autor señala:

[Nota 3] Set long big_number para que pueda ver la definición de un disparador complicada o vista, o texto en cualquier columna de largo o CLOB.

Yo la mía como SET LONG 32000 (mi línea más larga fue de un poco más de 2000 caracteres) y que resolvió el problema para mí.

Cuestiones relacionadas