oracle base 64解码为clob

时间:2018-05-21 18:52:24

标签: sql oracle encoding base64

我有一个基本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函数来执行此转换。请帮忙

1 个答案:

答案 0 :(得分:0)

假设您的数据足够大,实际上需要存储在CLOB中(即它的数千个字符),您需要执行以下操作:

  1. 从表中检索您的CLOB。
  2. 使用utl_lob.converttoblob转换为BLOB。
  3. 使用utl_lob.substr将BLOB分成多个部分,返回RAW。每个部分必须小于2000个字符的RAW大小限制和4个字节的倍数(为什么4个?参见:Is it possible to base64-encode a file in chunks?
  4. 使用utl_encode.base64_decode对块进行base64解码。
  5. 使用utl_raw.cast_to_varchar2将已解码的块转换回varchar2。
  6. 将所有已解码的块连接到CLOB中。
  7. 如果您的编码数据不在预期的字符集中,步骤#5可能会导致一些字符集问题,但我并不完全清楚转换的工作原理。

    显然,你想为此编写一个函数,所以你不必多次这样做。