为什么不能运行hextoraw(),我误解了吗?

时间:2014-08-05 03:12:31

标签: oracle

我正在运行Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production,我正在尝试将一些十六进制字符转换为字符串:

SQL> select hextoraw('414243') from dual;

HEXTOR
------
414243

但似乎这里没有做任何事情,我想念这个宏吗?

2 个答案:

答案 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 |