Recuperar información de una columna CLOB

Una columna CLOB puede contener hasta 4GB de información, por lo tanto  recuperar su información con sql*plus no es  tan sencillo, hay que hacerlo utilizando la librería DBMS_LOB

Utilizaremos las dos funciones siguientes:

DBMS_LOB.substr(CLOB, longitud, posicion_inicial);
DBMS_LOB.getlength(CLOB);

Con ambas podemos obtener la siguiente select:

SELECT DBMS_LOB.substr(valor,DBMS_LOB.getlength(valor),1)
 FROM table_valor;

Está select dará error con valores de más de 5000 caracteres:

SELECT DBMS_LOB.SUBSTR (valor,DBMS_LOB.getlength(valor),1) FROM tabla_valor
*
ERROR en línea 1:
ORA-06502: PL/SQL: error : buffer de cadenas de caracteres demasiado pequeño
numérico o de valor
ORA-06512: en línea 1

Esto se debe a que en sql el máximo de longitud permitido es 4000, con lo cual limitándolo a los primeros 4000 caracteres evitamos este error:

dbms_lob.substr( clob_column, for_how_many_bytes, from_which_byte );
 

Utilizando plsql podemos recuperar hasta 32K

declare
   my_var long;
begin
   for x in ( select X from t )
   loop
       my_var := dbms_lob.substr( x.X, 32000, 1 );
       ....