Oracle兼容-函数-RAWTOHEX()函数
1. 语法
1. RAWTOHEX(expr)
2. 定义和用法
RAWTOHEX() 函数的作用是将 expr 转换为用十六进制表示的字符值。
RAWTOHEX() 函数只接受 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET、RAW、VARCHAR2 等数据类型的参数。
函数返回一个字符串,由构成原始值字节的十六进制表示,即每个字节由两个十六进制数字表示。
3. Oracle兼容说明
在Oracle中,expr参数支持的类型为除 LONG,LONG RAW,CLOB,NCLOB,BLOB,BFILE 之外的任何标量数据类型,而GreatSQL中仅支持上面提到的几个数据类型。
| RAWTOHEX 输入 | ORACLE | GreatSQL |
|---|---|---|
| RAWTOHEX(1) | C102 | ERROR 3064 (HY000): Incorrect type for argument args 0 in function rawtohex. |
| RAWTOHEX(sysdate) | E7070B06081C2300 | ERROR 3064 (HY000): Incorrect type for argument args 0 in function rawtohex. |
本函数在只允许用于存储程序的语句中时与在可以独立执行的SQL语句中时的工作方式不同。前者在函数转换为十六进制值之前执行隐式转换,这可能会导致本函数在不同场景返回不同的值。例如:
1. DECLARE
2. a varchar2(8);
3. BEGIN
4. a := rawtohex('AB');
5. SELECT a;
6. SELECT RAWTOHEX('AB') INTO a FROM DUAL;
7. SELECT a;
8. END;
输出结果为:
1. +------+
2. | a |
3. +------+
4. | AB |
5. +------+
6. 1 row in set (0.00 sec)
8. +------+
9. | a |
10. +------+
11. | 4142 |
12. +------+
13. 1 row in set (0.00 sec)
产生差异的原因是在只允许用于存储程序的语句中时将’AB’隐式转换为RAW类型(即将 ‘AB’ 视为等于 0xAB 的单个字节),然后再传递给 RAWTOHEX() 进行转换,所以返回字符串 ‘AB’。然而,在可以独立执行的 SQL 语句中时并没有进行这种隐式转换,此时 ‘AB’ 已经是 2 字节的 RAW,所以返回 4142。
4. 示例
1. greatsql> SELECT RAWTOHEX(NULL) FROM DUAL;
2. +----------------+
3. | RAWTOHEX(NULL) |
4. +----------------+
5. | NULL |
6. +----------------+
8. greatsql> SELECT RAWTOHEX('A') FROM DUAL;
9. +---------------+
10. | RAWTOHEX('A') |
11. +---------------+
12. | 41 |
13. +---------------+
15. greatsql> SELECT RAWTOHEX(UNHEX('A')) FROM DUAL;
16. +----------------------+
17. | RAWTOHEX(UNHEX('A')) |
18. +----------------------+
19. | 0A |
20. +----------------------+
问题反馈
联系我们
扫码关注微信公众号

