我的 Oracle 表中存在 Base 64 加密数据格式的数据。该数据存在于 clob 字段中。
create table tableA
(
id number,
encoded_description clob);
insert into tableA
(id, encoded_description)
values
(1, 'Zm9sbG93IHVw');
insert into tableA
(id, encoded_description)
values
(2, 'dG8gbWFueSByZWQgZmxhZ3M=');
commit;
Table A output which contains base64 encoded data in encoded_description field:
Table A:
ID, encoded_description
1 Zm9sbG93IHVw
2 dG8gbWFueSByZWQgZmxhZ3M=
create table tableB
(
id number,
decoded_description clob);
Table B: output after conversion
ID, Decoded_description
1 <<Original Text>>
2 <<Original Text>>
我想通过将clob字段中的base64数据解码为其原始文本形式,将数据从tableA加载到tableB中。我怎样才能做到这一点?我可以使用任何 oracle 函数来执行此转换吗?请帮忙
假设您的数据足够大,实际上需要存储在 CLOB 中(即有几千个字符),您需要执行以下操作:
utl_lob.converttoblob
转换为 BLOB。utl_lob.substr
将 BLOB 分成多个部分,这会返回 RAW。每个部分必须小于 2000 个字符的 RAW 大小限制和 4 字节的倍数(为什么是 4?请参阅:是否可以对文件进行分块进行 Base64 编码?)utl_encode.base64_decode
对块进行 Base64 解码。utl_raw.cast_to_varchar2
将解码后的块转换回 varchar2。如果您的编码数据不在预期的字符集中,步骤#5可能会导致一些字符集问题,但我不完全清楚该转换是如何工作的。
显然,您想为此编写一个函数,这样您就不必多次执行此操作。