2012-04-30 12 views
6

Tengo un DB2 (9.5.1) tabla que se define de la siguiente manera:DB2 crea un CLOB grande (> 32 KB) en el texto?

CREATE TABLE MY_TABLE 
( 
    ID INTEGER DEFAULT 0 NOT NULL, 
    TEXT CLOB(104857600), 
    PRIMARY KEY (ID) 
); 

Ahora si quiero consultar la cadena de texto real que se almacena en el CLOB lo hago de esta manera:

select cast(t.TEXT as varchar(32000)) 
    from MY_TABLE t 
    where t.ID = 1; 

el problema ahora es que mi texto se trunca, pero para un varchar la longitud máxima es de 32 KB, por lo que esta consulta falla:

select cast(t.TEXT as varchar(33000)) 
    from MY_TABLE t 
where t.ID = 1; 

¿Hay alguna otra posibilidad de cómo puedo recuperar el contenido completo de un CLOB como salida de texto?

Peter

Respuesta

2

En situación similar, donde tenía que recuperar datos XML, esto funcionó para mí

select my_id, cast(xmlserialize(my_column as clob(1m)) as varchar(20000)) from schema.my_table where my_id = 463 

antes yo era capaz de hacer esto en SQL ardilla sin la REPARTO pero versión más reciente tuve para utilizar el elenco

+2

Pero echas a varchar (20000) en el camino. ¿Cómo maneja esto varchars cuyo tamaño es> 32k? – Beryllium

1

Por lo que yo sé, no hay forma de evitar el límite de 32k, si lo utiliza en SQL selecciona como lo describió.

Si usa JDBC para recuperar sus datos, en lugar de usar getString() en el conjunto de resultados, obtiene un identificador CLOB, y de eso puede obtener una secuencia.

Por otro lado, ¿es realmente un límite? ¿Realmente usa CLOB en cláusulas where, etc.? Un RDBMS está optimizado para que los tamaños de fila más pequeños se manejen en las transacciones de manera eficiente.

En general, transmita los datos. Considere rediseñar su modelo de datos, si este CLOB contiene datos que se pueden dividir en varias columnas, y necesita algunos de sus datos en su consulta (donde ..., ordenar por ... etc.).

7

Encontré esto en otro lugar en la web y pensé que lo compartiría ya que funciona alrededor del límite de 32k.

SELECT 
    XMLCAST (
    XMLPARSE (
     DOCUMENT CAST (
     MY_CLOB_DATA AS BLOB 
    ) 
     PRESERVE WHITESPACE 
    ) as XML 
) 
FROM 
MY_TABLE 
WHERE ID = 1 
+0

Necesitaba convertir un BLOB en XML y esto funcionó de maravilla ¡muchas gracias! – WannaGetHigh

Cuestiones relacionadas