sql >> Base de Datos >  >> RDS >> Oracle

Base de datos Oracle:¿Cómo leer un BLOB?

Puede volcar el valor en hexadecimal usando UTL_RAW.CAST_TO_RAW(UTL_RAW.CAST_TO_VARCHAR2()) .

SELECT b FROM foo;
-- (BLOB)

SELECT UTL_RAW.CAST_TO_RAW(UTL_RAW.CAST_TO_VARCHAR2(b))
FROM foo;
-- 1F8B080087CDC1520003F348CDC9C9D75128CF2FCA49D1E30200D7BBCDFC0E000000

Esto es útil porque este es el mismo formato que se usa para insertar en las columnas BLOB:

CREATE GLOBAL TEMPORARY TABLE foo (
    b BLOB);
INSERT INTO foo VALUES ('1f8b080087cdc1520003f348cdc9c9d75128cf2fca49d1e30200d7bbcdfc0e000000');

DESC foo;
-- Name Null Type 
-- ---- ---- ---- 
-- B        BLOB 

Sin embargo, en cierto punto (¿2000 bytes?) la cadena hexadecimal correspondiente excede la longitud máxima de cadena de Oracle. Si necesita manejar ese caso, deberá combinar ¿Cómo obtengo contenido textual de BLOB en Oracle SQL con la documentación para DMBS_LOB.SUBSTR para un enfoque más complicado que le permitirá ver las subcadenas del BLOB.