【问题标题】:Oracle INSERTING into RAW with UTL_RAW.cast_to_rawOracle 使用 UTL_RAW.cast_to_raw 插入 RAW
【发布时间】:2021-11-26 22:20:07
【问题描述】:

我遇到了一些从未实现过的代码(见下文)。

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)
);
/

【问题讨论】:

  • 您是否尝试将两个rawtohex 调用都替换为UTL_RAW.cast_to_raw?您当前的代码是什么样的,您遇到了什么语法错误?

标签: oracle raw


【解决方案1】:

您使用了错误的函数,rawtohex。您必须在您的情况下使用 cast_to_raw 包中的 utl_raw

此函数转换使用某个数字表示的 VARCHAR2 值 数据字节转换为具有该数据字节数的 RAW 值。这 数据本身没有以任何方式修改,但它的数据类型被重铸为 RAW 数据类型。

演示

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多