2012-04-30 3 views
6

Ho un DB2 (9.5.1) tabella che è definito come segue:DB2 ha lanciato un grande CLOB (> 32KB) nel testo?

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

Ora, se voglio interrogare la stringa di testo effettivo che viene memorizzato nel CLOB lo faccio in questo modo:

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

il problema ora è che il mio testo viene troncato, ma per un varchar la lunghezza massima è di 32 KB, quindi questa query ha esito negativo:

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

Esiste un'altra possibilità su come posso recuperare l'intero contenuto di un CLOB come output di testo?

Peter

risposta

2

In situazione simile, in cui ho dovuto recuperare i dati XML, questo ha funzionato per me

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

in precedenza sono stato in grado di fare questo in scoiattolo sql senza il CAST, ma la versione più recente ho avuto per utilizzare il cast

+2

Ma si esegue il casting su varchar (20000) lungo la strada. Come gestisce questo varchars la cui dimensione è> 32k? – Beryllium

1

Per quanto ne so non c'è modo di aggirare il limite di 32k, se lo si utilizza in SQL si seleziona come descritto.

Se si utilizza JDBC per recuperare i dati, anziché utilizzare getString() sul set di risultati, si ottiene un handle CLOB e da questo è possibile ottenere uno stream.

D'altra parte, è davvero un limite? Utilizzi davvero i CLOB in cui clausole, ecc.? Un RDBMS è ottimizzato per gestire le dimensioni di righe più piccole nelle transazioni in modo efficiente.

In generale, trasmettere i dati. Considera la riprogettazione del tuo modello di dati, se questo CLOB contiene dati che possono essere suddivisi in più colonne, e hai bisogno di alcuni dei suoi dati nella tua query (dove ..., ordine di ... ecc.).

7

L'ho trovato altrove sul Web e ho pensato di condividerlo visto che funziona intorno al limite di 32.000.

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

Avevo bisogno di convertire un BLOB in XML e questo ha funzionato come un fascino grazie mille! – WannaGetHigh