我有一个基本64位加密数据格式的oracle表中的数据。该数据存在于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函数来执行此转换。请帮忙
答案 0 :(得分:0)
假设您的数据足够大,实际上需要存储在CLOB中(即它的数千个字符),您需要执行以下操作:
utl_lob.converttoblob
转换为BLOB。utl_lob.substr
将BLOB分成多个部分,返回RAW。每个部分必须小于2000个字符的RAW大小限制和4个字节的倍数(为什么4个?参见:Is it possible to base64-encode a file in chunks?)utl_encode.base64_decode
对块进行base64解码。utl_raw.cast_to_varchar2
将已解码的块转换回varchar2。显然,你想为此编写一个函数,所以你不必多次这样做。