extracted objects

This commit is contained in:
2025-12-17 13:02:12 +01:00
commit 7dd4ea08e1
195 changed files with 70591 additions and 0 deletions

168
docs/packages/UTL_BASE64.md Normal file
View File

@@ -0,0 +1,168 @@
# UTL_BASE64
## Package Specification
```sql
PACKAGE "UTL_BASE64" is
function decode_base64(p_clob_in in clob) return blob;
function encode_base64(p_blob_in in blob) return clob;
FUNCTION encodeBlob2Base64(pBlobIn IN BLOB) RETURN BLOB;
FUNCTION decodeBase642Blob(pBlobIn IN BLOB) RETURN BLOB;
function base64encode(p_blob in blob) return clob;
end;
```
## Package Body
```sql
PACKAGE BODY "UTL_BASE64" is
function decode_base64(p_clob_in in clob) return blob is
v_blob blob;
v_result blob;
v_offset integer;
v_buffer_size binary_integer := 48;
v_buffer_varchar varchar2(48);
v_buffer_raw raw(48);
begin
if p_clob_in is null then
return null;
end if;
dbms_lob.createtemporary(v_blob, true);
v_offset := 1;
for i in 1 .. ceil(dbms_lob.getlength(p_clob_in) / v_buffer_size) loop
dbms_lob.read(p_clob_in, v_buffer_size, v_offset, v_buffer_varchar);
v_buffer_raw := utl_raw.cast_to_raw(v_buffer_varchar);
v_buffer_raw := utl_encode.base64_decode(v_buffer_raw);
dbms_lob.writeappend(v_blob, utl_raw.length(v_buffer_raw), v_buffer_raw);
v_offset := v_offset + v_buffer_size;
end loop;
v_result := v_blob;
dbms_lob.freetemporary(v_blob);
return v_result;
end decode_base64;
function encode_base64(p_blob_in in blob) return clob is
v_clob clob;
v_result clob;
v_offset integer;
v_chunk_size binary_integer := (48 / 4) * 3;
v_buffer_varchar varchar2(48);
v_buffer_raw raw(48);
begin
if p_blob_in is null then
return null;
end if;
dbms_lob.createtemporary(v_clob, true);
v_offset := 1;
for i in 1 .. ceil(dbms_lob.getlength(p_blob_in) / v_chunk_size) loop
dbms_lob.read(p_blob_in, v_chunk_size, v_offset, v_buffer_raw);
v_buffer_raw := utl_encode.base64_encode(v_buffer_raw);
v_buffer_varchar := utl_raw.cast_to_varchar2(v_buffer_raw);
dbms_lob.writeappend(v_clob, length(v_buffer_varchar), v_buffer_varchar);
v_offset := v_offset + v_chunk_size;
end loop;
v_result := v_clob;
dbms_lob.freetemporary(v_clob);
return v_result;
end encode_base64;
FUNCTION encodeBlob2Base64(pBlobIn IN BLOB) RETURN BLOB IS
vAmount NUMBER := 45;
vBlobEnc BLOB := empty_blob();
vBlobEncLen NUMBER := 0;
vBlobInLen NUMBER := 0;
vBuffer RAW(45);
vOffset NUMBER := 1;
BEGIN
-- dbms_output.put_line('Start base64 encoding.');
vBlobInLen := dbms_lob.getlength(pBlobIn);
-- dbms_output.put_line('<BlobInLength>' || vBlobInLen);
dbms_lob.createtemporary(vBlobEnc, TRUE);
LOOP
IF vOffset >= vBlobInLen THEN
EXIT;
END IF;
dbms_lob.read(pBlobIn, vAmount, vOffset, vBuffer);
BEGIN
dbms_lob.append(vBlobEnc, utl_encode.base64_encode(vBuffer));
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('<vAmount>' || vAmount || '<vOffset>' || vOffset || '<vBuffer>' || vBuffer);
dbms_output.put_line('ERROR IN append: ' || SQLERRM);
RAISE;
END;
vOffset := vOffset + vAmount;
END LOOP;
vBlobEncLen := dbms_lob.getlength(vBlobEnc);
-- dbms_output.put_line('<BlobEncLength>' || vBlobEncLen);
-- dbms_output.put_line('Finshed base64 encoding.');
RETURN vBlobEnc;
END encodeBlob2Base64;
FUNCTION decodeBase642Blob(pBlobIn IN BLOB) RETURN BLOB IS
vAmount NUMBER := 256;--32;
vBlobDec BLOB := empty_blob();
vBlobDecLen NUMBER := 0;
vBlobInLen NUMBER := 0;
vBuffer RAW(256);--32);
vOffset NUMBER := 1;
BEGIN
-- dbms_output.put_line('Start base64 decoding.');
vBlobInLen := dbms_lob.getlength(pBlobIn);
-- dbms_output.put_line('<BlobInLength>' || vBlobInLen);
dbms_lob.createtemporary(vBlobDec, TRUE);
LOOP
IF vOffset >= vBlobInLen THEN
EXIT;
END IF;
dbms_lob.read(pBlobIn, vAmount, vOffset, vBuffer);
BEGIN
dbms_lob.append(vBlobDec, utl_encode.base64_decode(vBuffer));
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('<vAmount>' || vAmount || '<vOffset>' || vOffset || '<vBuffer>' || vBuffer);
dbms_output.put_line('ERROR IN append: ' || SQLERRM);
RAISE;
END;
vOffset := vOffset + vAmount;
END LOOP;
vBlobDecLen := dbms_lob.getlength(vBlobDec);
-- dbms_output.put_line('<BlobDecLength>' || vBlobDecLen);
-- dbms_output.put_line('Finshed base64 decoding.');
RETURN vBlobDec;
END decodeBase642Blob;
function base64encode(p_blob in blob)
return clob
is
CRLF constant varchar2(2) := chr(13)||chr(10);
l_clob clob;
l_amount integer := 23826;
l_offset integer := 1;
l_raw raw(32767);
l_buf varchar2(32767);
l_len integer := dbms_lob.getlength(p_blob);
begin
dbms_lob.createtemporary(l_clob, true, dbms_lob.call);
while l_offset <= l_len loop
dbms_lob.read(p_blob, l_amount, l_offset, l_raw);
l_offset := l_offset + l_amount;
l_buf := utl_raw.cast_to_varchar2(utl_encode.base64_encode(l_raw));
l_buf := replace(l_buf, CRLF);
dbms_lob.writeappend(l_clob, length(l_buf), l_buf);
end loop;
return l_clob;
end base64encode;
end;
```