ВСТАВКА Oracle в RAW с помощью UTL_RAW.cast_to_raw

#oracle #raw

Вопрос:

Я столкнулся с некоторым кодом, который никогда не был реализован (см. Ниже).

 CREATE TABLE encryption_values
(
  NAME   VARCHAR2(6),
  VALUE  NVARCHAR2(100)
);
/

insert into encryption_values
select 'key' name,
rawtohex (
rpad ('52AB32;^$!ER94988OPS3W21@@=WTQ32',32,'X')
) value
from dual
union
select 'iv' name,
rawtohex (
rpad ('TY54ABCX12@÷× ==643QREVDG43AAYMN',32,'X')
) value
from dual;

 

Я хочу изменить определение таблицы с NVARCHAR2(100) на RAW(256). Я пытался использовать
UTL_RAW.cast_to_raw ()
, но я сталкиваюсь с некоторыми синтаксическими ошибками. Может ли кто-нибудь, пожалуйста, предоставить мне правильный синтаксис. Примечание.Я хочу сохранить RPAD, чтобы убедиться, что я конвертирую 32 байта символов.

Я хочу ВСТАВИТЬ данные в это определение таблицы.

 
CREATE TABLE encryption_values
(
  NAME   VARCHAR2(6),
  VALUE  RAW(256)
);
/

 

Комментарии:

1. Вы пробовали просто заменить оба rawtohex звонка на UTL_RAW.cast_to_raw ? Как выглядит ваш текущий код и какие синтаксические ошибки вы получаете?

Ответ №1:

Вы используете неправильную функцию, rawtohex . Вы должны использовать в вашем случае cast_to_raw из пакета utl_raw

Эта функция преобразует значение VARCHAR2, представленное с использованием некоторого количества байтов данных, в ИСХОДНОЕ значение с таким количеством байтов данных. Сами данные никоим образом не изменяются, но их тип данных преобразуется в НЕОБРАБОТАННЫЙ тип данных.

ДЕМОНСТРАЦИЯ

 SQL> desc encryption_values
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NAME                                               VARCHAR2(6)
 VALUE                                              RAW(256)

SQL> insert into encryption_values
  2  select 'key' name,
  3  utl_raw.cast_to_raw (rpad('52AB32;^$!ER94988OPS3W21@@=WTQ32',32,'X')) value
  4  from dual
  5  union
  6  select 'iv' name,
  7  utl_raw.cast_to_raw (rpad('TY54ABCX12@÷× ==643QREVDG43AAYMN',32,'X')) value
  8* from dual
SQL> /

2 rows created.

SQL> select * from encryption_values ;

NAME
------
VALUE
--------------------------------------------------------------------------------
iv
5459353441424358313240EFBFBDEFBFBDEFBFBDEFBFBD2B3D3D3634335152455644473433414159

key
3532414233323B5E2421455239343938384F50533357323140403D5754513332