Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Banco de dados Oracle:Como ler um BLOB?


Você pode despejar o valor em 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

Isso é útil porque esse é o mesmo formato usado para inserir em colunas BLOB:
CREATE GLOBAL TEMPORARY TABLE foo (
    b BLOB);
INSERT INTO foo VALUES ('1f8b080087cdc1520003f348cdc9c9d75128cf2fca49d1e30200d7bbcdfc0e000000');

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

No entanto, em um determinado ponto (2000 bytes?) a string hexadecimal correspondente excede o comprimento máximo da string do Oracle. Se você precisar lidar com esse caso, precisará combinar Como obtenho conteúdo textual do BLOB no Oracle SQL com a documentação para DMBS_LOB.SUBSTR para uma abordagem mais complicada que permitirá que você veja substrings do BLOB.