Oracle
 sql >> Base de données >  >> RDS >> Oracle

Base de données Oracle :Comment lire un BLOB ?

Vous pouvez vider la valeur en hexadécimal en utilisant 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

C'est pratique car c'est le même format que celui utilisé pour l'insertion dans les colonnes BLOB :

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

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

Cependant, à un certain point (2000 octets ?), la chaîne hexadécimale correspondante dépasse la longueur de chaîne maximale d'Oracle. Si vous avez besoin de gérer ce cas, vous devrez combiner Comment puis-je obtenir le contenu textuel de BLOB dans Oracle SQL avec la documentation pour DMBS_LOB.SUBSTR pour une approche plus compliquée qui vous permettra de voir les sous-chaînes du BLOB.