Оракул базы 64 декодировать, чтобы забить - PullRequest
0 голосов
/ 21 мая 2018

У меня есть данные, представленные в таблице оракулов в формате зашифрованных данных 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>>

Я хочу загрузить данные из таблицы A в таблицу B путем декодирования данных base64 в поле clob в исходную текстовую форму.Как я могу достичь этого?Могу ли я использовать любые функции оракула для выполнения этого преобразования.Пожалуйста, помогите

1 Ответ

0 голосов
/ 22 мая 2018

Предполагая, что ваши данные достаточно велики, чтобы их действительно нужно было хранить в CLOB (т. Е. Это несколько тысяч символов), вам необходимо сделать следующее:

  1. Получить ваш CLOB из таблицы.
  2. Преобразовать в BLOB с помощью utl_lob.converttoblob.
  3. Разбить BLOB на части, используя utl_lob.substr, что возвращает RAW.Каждая часть должна быть меньше, чем ограничение размера RAW 2000 символов и кратно 4 байтам (почему 4? См .: Можно ли кодировать base64 файл в чанках? )
  4. Используйте utl_encode.base64_decode для base64-декодирования фрагмента.
  5. Используйте utl_raw.cast_to_varchar2 для преобразования декодированного фрагмента обратно в varchar2.
  6. Объедините все декодированные фрагменты в CLOB.

Шаг № 5 может привести к некоторым проблемам с набором символов, если ваши закодированные данные не находятся в ожидаемом наборе символов, но я не совсем понимаю, как работает это преобразование.

Очевидно, вы хотитенапишите для этого функцию, чтобы вам никогда не приходилось делать это более одного раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...