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

Comment obtenir un fichier à partir d'un BLOB dans Oracle ?

Dans ce didacticiel, vous apprendrez à obtenir un fichier à partir de la colonne BLOB dans Oracle. Pour donner un exemple, j'ai créé une table EXT_FILES dans Oracle et voici la structure de la table.

CREATE TABLE EXT_FILES
(
FILE_NAME VARCHAR2(1000 BYTE),
FILE_CONTENT BLOB
)
/

Insérez les données dans le tableau ci-dessus. Si vous ne savez pas comment insérer un fichier dans la colonne BLOB, consultez l'article suivant Comment insérer un fichier dans la colonne Oracle Table BLOB ?

Vous devez avoir un objet d'annuaire Oracle créé dans votre schéma, pour obtenir les fichiers de la colonne BLOB sur le disque. Pour créer un répertoire dans Oracle donnez la commande suivante.

CREATE OR REPLACE DIRECTORY IMGDIR AS 'C:\TEMP\IMAGES';

L'exemple ci-dessous est l'exemple de procédure stockée Oracle, qui récupérera les enregistrements de la table EXT_FILES (contenant des données BLOB) à l'aide d'un curseur, puis extraira les fichiers un par un dans le répertoire spécifié.

Exemple de procédure stockée Oracle pour obtenir le fichier à partir de la colonne BLOB dans Oracle

CREATE OR REPLACE PROCEDURE get_files_from_blob
IS
l_file UTL_FILE.file_type;
l_buffer RAW (32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
l_blob_len INTEGER;
l_blob BLOB;
l_filename ext_files.file_name%TYPE;
/* cursor to get the records from the table */
CURSOR c_files
IS
SELECT file_name, file_content FROM ext_files;
BEGIN
OPEN c_files;

LOOP

FETCH c_files
INTO l_filename, l_blob;

EXIT WHEN c_files%NOTFOUND;

l_blob_len := DBMS_LOB.getlength (l_blob);

/* Change the directory name (IMGDIR) to your Oracle directory object name*/
l_file :=
UTL_FILE.fopen ('IMGDIR',
l_filename,
'wb',
32767);
l_pos := 1;

WHILE l_pos < l_blob_len
LOOP
DBMS_LOB.read (l_blob,
l_amount,
l_pos,
l_buffer);
UTL_FILE.put_raw (l_file, l_buffer, TRUE);
l_pos := l_pos + l_amount;
END LOOP;

UTL_FILE.fclose (l_file);
END LOOP;

CLOSE c_files;
EXCEPTION
WHEN OTHERS
THEN
IF UTL_FILE.is_open (l_file)
THEN
UTL_FILE.fclose (l_file);
END IF;

RAISE;
END;

Tester

BEGIN
get_files_from_blob;
END;
/

Sortie

PL/SQL procedure successfully completed.

Vous pouvez maintenant vérifier l'emplacement de l'objet de répertoire IMGDIR pour les fichiers extraits.

Voir aussi :

  • Extraire des données BLOB d'Oracle Table à l'aide de Toad