oracle base 64 解码为 clob

问题描述 投票:0回答:1

我的 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 函数来执行此转换吗?请帮忙

sql oracle encoding base64
1个回答
0
投票

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

  1. 从表中检索你的 CLOB。
  2. 使用
    utl_lob.converttoblob
    转换为 BLOB。
  3. 使用
    utl_lob.substr
    将 BLOB 分成多个部分,这会返回 RAW。每个部分必须小于 2000 个字符的 RAW 大小限制和 4 字节的倍数(为什么是 4?请参阅:是否可以对文件进行分块进行 Base64 编码?
  4. 使用
    utl_encode.base64_decode
    对块进行 Base64 解码。
  5. 使用
    utl_raw.cast_to_varchar2
    将解码后的块转换回 varchar2。
  6. 将所有解码后的块连接成 CLOB。

如果您的编码数据不在预期的字符集中,步骤#5可能会导致一些字符集问题,但我不完全清楚该转换是如何工作的。

显然,您想为此编写一个函数,这样您就不必多次执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.