manejo insertar hugeclob example entre ejemplo diferencia dbms_lob consultar campo sql oracle plsql clob ora-06502

sql - insertar - Cómo consultar una columna CLOB en Oracle



manejo de clob en oracle (7)

Al obtener la subcadena de una columna CLOB y utilizar una herramienta de consulta que tenga restricciones de tamaño / búfer, a veces deberá establecer el BÚFER a un tamaño mayor. Por ejemplo, al usar SQL Plus, utilice el SET BUFFER 10000 para establecerlo en 10000, ya que el valor predeterminado es 4000.

Al ejecutar el comando DBMS_LOB.substr también puede especificar la cantidad de caracteres que desea devolver y el desplazamiento desde el cual. Entonces, usar DBMS_LOB.substr(column, 3000) podría restringirlo a una cantidad lo suficientemente pequeña para el buffer.

Consulte la documentación de Oracle para obtener más información sobre el comando substr.

DBMS_LOB.SUBSTR ( lob_loc IN CLOB CHARACTER SET ANY_CS, amount IN INTEGER := 32767, offset IN INTEGER := 1) RETURN VARCHAR2 CHARACTER SET lob_loc%CHARSET;

Estoy intentando ejecutar una consulta que tiene algunas columnas que son un tipo de datos CLOB. Si ejecuto la consulta como siempre, todos esos campos solo tienen (CLOB) como valor.

Intenté usar DBMS_LOB.substr(column ) y recibí el error

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

¿Cómo puedo consultar la columna CLOB?


Esto funciona

select DBMS_LOB.substr(myColumn, 3000) from myTable


Me encontré con otra condición con HugeClob en mi base de datos Oracle. dbms_lob.substr solo permitía un valor de 4000 en la función, por ejemplo:

dbms_lob.substr(column,4000,1)

entonces, para mi HughClob, que era más grande, tuve que usar dos llamadas en select :

select dbms_lob.substr(column,4000,1) part1, dbms_lob.substr(column,4000,4001) part2 from .....

Estaba llamando desde una aplicación Java, así que simplemente concatené part1 y part2 y lo envié como un correo electrónico.


Otra opción es crear una función y llamar a esa función cada vez que necesite seleccionar la columna de clob.

create or replace function clob_to_char_func (clob_column in CLOB, for_how_many_bytes in NUMBER, from_which_byte in NUMBER) return VARCHAR2 is begin Return substrb(dbms_lob.substr(clob_column ,for_how_many_bytes ,from_which_byte) ,1 ,for_how_many_bytes); end;

y llamar a esa función como;

SELECT tocharvalue, clob_to_char_func(tocharvalue, 1, 9999) FROM (SELECT clob_column AS tocharvalue FROM table_name);


Para agregar a la respuesta.

declare v_result clob; begin ---- some operation on v_result dbms_lob.substr( v_result, 4000 ,length(v_result) - 3999 ); end; /

En dbms_lob.substr

first parameter es clob que desea extraer.

Second parameter es la cantidad de trozo que quieres extraer.

Third parameter es de qué palabra quiere extraer.

En el ejemplo anterior, sé que mi tamaño de bloque es más de 50000, por lo que quiero los últimos 4000 caracteres.


Para grandes selecciones CLOB también se puede utilizar:

SELECT dbms_lob.substr( column_name, dbms_lob.getlength(column_name), 1) FROM foo


Si está utilizando SQL * Plus intente lo siguiente ...

set long 8000 select ...