Bonjour,
J'ai dans une base de données Oracle un Blob encodé en base64 qui contient un PDF, comment
avec un script PL/SQL décoder ce blob afin de récupérer et afficher correctement le fichier PDF.
Cordialement.
Bonjour,
J'ai dans une base de données Oracle un Blob encodé en base64 qui contient un PDF, comment
avec un script PL/SQL décoder ce blob afin de récupérer et afficher correctement le fichier PDF.
Cordialement.
j'ai trouve cette fonction pour decoder, mais elle concerne une base 64 clob to blob,
je cherche plutôt Base64 blob to blob.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 CREATE OR REPLACE FUNCTION base64decode(p_clob CLOB) RETURN BLOB -- ----------------------------------------------------------------------------------- -- File Name : <a href="https://oracle-base.com/dba/miscellaneous/base64decode.sql" target="_blank">https://oracle-base.com/dba/miscella...se64decode.sql</a> -- Author : Tim Hall -- Description : Decodes a Base64 CLOB into a BLOB -- Last Modified: 09/11/2011 -- ----------------------------------------------------------------------------------- IS l_blob BLOB; l_raw RAW(32767); l_amt NUMBER := 7700; l_offset NUMBER := 1; l_temp VARCHAR2(32767); BEGIN BEGIN DBMS_LOB.createtemporary (l_blob, FALSE, DBMS_LOB.CALL); LOOP DBMS_LOB.read(p_clob, l_amt, l_offset, l_temp); l_offset := l_offset + l_amt; l_raw := UTL_ENCODE.base64_decode(UTL_RAW.cast_to_raw(l_temp)); DBMS_LOB.append (l_blob, TO_BLOB(l_raw)); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; RETURN l_blob; END; /
j'ai trouvé la solution avec cette fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 Create Or Replace function DecodeToBlob(pBlob blob) return blob is -- Decodes a Base64 encoded clob into a blob MAX_DEC_CHUNK_LEN constant pls_integer := 14784; -- Don't change!! vLen pls_integer := coalesce(dbms_lob.getlength(pBlob), 0); vBufferRaw raw(32767); vBufferVarchar2 varchar2(32767 byte); vBufferSize integer := MAX_DEC_CHUNK_LEN; vOffset integer := 1; vResult blob; Begin case when vLen = 0 then vResult := case when pBlob is null then null else empty_blob() end; when vLen <= MAX_DEC_CHUNK_LEN then vResult := utl_encode.base64_decode(pBlob); when vLen > MAX_DEC_CHUNK_LEN then dbms_lob.createtemporary(vResult, false, dbms_lob.call); for i in 1..ceil(vLen / vBufferSize) loop dbms_lob.read(pBlob, vBufferSize, vOffset, vBufferVarchar2); vBufferRaw:=utl_encode.base64_decode(vBufferVarchar2); dbms_lob.writeappend(vResult, utl_raw.length(vBufferRaw), vBufferRaw); vOffset := vOffset + vBufferSize; end loop; end case; return vResult; end;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager