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 ); ....