我遇到了一些从未实现过的代码(见下文)。
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)
);
/发布于 2021-10-06 19:01:09
你使用了错误的函数,rawtohex。在您的示例中,必须使用包cast_to_raw中的utl_raw。
此函数将使用一定数量的数据字节表示的VARCHAR2值转换为具有该数目的数据字节的原始值。数据本身没有以任何方式被修改,但是它的数据类型被重铸为原始数据类型。
Demo
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
3532414233323B5E2421455239343938384F50533357323140403D5754513332https://stackoverflow.com/questions/69470745
复制相似问题