Commits
1
1
-- https://stackoverflow.com/questions/19539408/error-when-decoding-base-64-to-blob
2
2
CREATE OR REPLACE FUNCTION base64_decode(p_content CLOB) RETURN BLOB
3
3
IS
4
-
C_CHUNK_SIZE CONSTANT INTEGER := 12000; -- should be a multiple of 4
4
+
C_CHUNK_SIZE CONSTANT INTEGER := 4000; -- should be a multiple of 4
5
5
C_NON_BASE64_SYM_PATTERN CONSTANT VARCHAR2(20) := '[^A-Za-z0-9+/]';
6
-
l_chunk_buf VARCHAR2(12000);
6
+
l_chunk_buf VARCHAR2(4000);
7
7
l_chunk_b64_buf RAW(9000);
8
8
l_chunk_offset INTEGER := 1;
9
9
l_chunk_size INTEGER;
10
10
l_res BLOB;
11
11
12
12
FUNCTION get_next_full_base64_chunk(l_data CLOB, p_cur_pos IN OUT INTEGER, p_desired_size INTEGER, p_cur_size IN OUT INTEGER) RETURN VARCHAR2 IS
13
-
l_res VARCHAR2(12000);
13
+
l_res VARCHAR2(4000);
14
14
l_tail_desired_size INTEGER;
15
15
BEGIN
16
16
l_res := dbms_lob.substr(l_data, p_desired_size, p_cur_pos);
17
17
p_cur_pos := p_cur_pos + p_desired_size;
18
18
IF l_res IS NULL THEN
19
19
RETURN NULL;
20
20
END IF;
21
21
22
22
l_res := regexp_replace(l_res, C_NON_BASE64_SYM_PATTERN, '');
23
23
p_cur_size := p_cur_size + length(l_res);