我正在运行Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
,我正在尝试将一些十六进制字符转换为字符串:
SQL> select hextoraw('414243') from dual;
HEXTOR
------
414243
但似乎这里没有做任何事情,我想念这个宏吗?
答案 0 :(得分:2)
因为工具将结果显示为字符串,所以似乎没有任何改变。实际上数据类型不同,请使用下面的SQL来检查:
SQL> SELECT DUMP('414243'),DUMP(HEXTORAW('414243')) from dual
A B
-------------------------------- --------------------------------------
Typ=96 Len=6: 52,49,52,50,52,51 Typ=23 Len=3: 65,66,67
答案 1 :(得分:1)
我相信SQL * Plus只是将RAW格式化为便于显示的格式。
HEXTORAW('414243')
将您的字符串转换为由RAW(3)
组成的[0x41 0x42 0x43]
。然后,当sqlplus尝试将该值显示给用户时,它会将其转换为可以打印到终端的内容。
Here是一个SQL小提琴,但它看起来像是以十进制格式而不是十六进制显示RAW值。我不确定sqlplus是否有格式化命令来改变这种行为。
select hextoraw( '414243' ) as col1,
utl_raw.cast_to_varchar2( hextoraw( '414243' )) as col2
from dual;
| COL1 | COL2 |
|----------|------|
| 65,66,67 | ABC |