`
- 浏览:
165947 次
- 性别:
- 来自:
济南
-
hextoraw函数和rawtohex函数----oracle库
介绍下两个函数的作用:
hextoraw():十六进制字符串转换为raw;
rawtohex():将raw串转换为十六进制;
先来看下hextoraw()函数,当出现比f大的字母时(以a最小z最大)就会报错:
正确结果:
sys@ORCL> select hextoraw('abcdef') from dual;
HEXTOR
------
ABCDEF
错误结果:
sys@ORCL> select hextoraw('abcdeg') from dual;
select hextoraw('abcdeg') from dual
*
ERROR at line 1:
ORA-01465: invalid hex number
再来看看rawtohex()函数:
sys@ORCL> select rawtohex('AA') from dual;
RAWT
----
4141
结果之所以是4141是因为A的ASCII为65,65转换为十六进制就是41。
下面再看一个较有疑惑的问题:
sys@ORCL> declare
2 a varchar2(100);
3 begin
4 select rawtohex('aaaa') into a from dual;
5 dbms_output.put_line(a);
6 end;
7 /
61616161
PL/SQL procedure successfully completed.
sys@ORCL> declare
2 a varchar2(100);
3 begin
4 a:=rawtohex('aaaa');
5 dbms_output.put_line(a);
6 end;
7 /
AAAA
PL/SQL procedure successfully completed.
为什么会出现这种情况?
原因在于:SELECT方法用的是SQL 引擎,而:=是用PL/SQL 引擎。
本例两个调用中给的参数都是CHAR类型,这时ORACLE要进行缺省的类型转换,把'aaaa'由CHAR转到RAW。
但是SQL引擎和PL/SQL引擎的这个类型转换却不一样,SQL引擎使用了utl_raw.cast_to_raw,所以最后结果是'61616161',PL/SQL使用了HEXTORAW,而手册上的说法应该是用HEXTORAW,不知道为什么。
因此在用到rawtohex()函数时,不应该给它自动类型转换的机会,因为这是最容易出错的。
如果你期待的结果是'61616161'就该这样写:rawtohex(utl_raw.cast_to_raw('aaaa'))
如果你期待的结果是'AAAA'就该这样写:rawtohex(hextoraw('aaaa'))
不管哪个引擎都不会错了。
在使用SQL*Plus将RAW类型获取为一个串时,会隐士的调用rawtohex函数,而插入串时会隐式的调用hextoraw函数,应该避免隐式转换,而在编写代码时总是使用显示转换,这是一个很好的实践做法!
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
描述中还提到了“字符类型转换”和“十六精致构成转化二进制”,这涉及到Oracle中的字符函数和转换函数。 Oracle中用于字符类型转换的函数很多,例如TO_CHAR、TO_NUMBER等。TO_CHAR函数可以将数值或日期转换为字符...
Oracle提供了一系列的函数,用于处理不同类型的数据,如字符串、数字、日期和时间等。下面按照文档所提供的内容,详细解读各个函数以及相关知识点: ### 第一章 字符串大全 字符串函数用于对字符数据进行处理。 -...
4. RAWTOHEX函数:将 RAW 类型转换为十六进制字符串。 5. ROWIDTOCHAR函数:将 ROWID 转换为字符类型。 6. TO_CHAR函数:将数字、日期类型的数据转换为字符类型。 7. TO_DATE函数:将字符类型的数据转换为日期类型。...
### Oracle函数库详解 #### 一、字符串处理函数 **1. ASCII('字符')** - **功能**: 返回指定字符的ASCII码(十进制数)。 - **示例**: `SELECT ASCII('A') FROM DUAL;` 返回结果为 `65`。 **2. CHR(数字)** - **...
- `RAWTOHEX` 和 `HEXTORAW`:在十六进制字符串和RAW类型之间转换。 5. **条件判断函数**: - `CASE`:根据条件返回不同的值。 - `DECODE`:类似IF-THEN-ELSE的简写形式。 6. **聚合函数**: - `COUNT`:计算...
Oracle数据库系统提供了丰富的内置函数,这些函数用于处理各种数据类型,包括数值、字符和日期等。下面我们将详细探讨一些常见的Oracle函数及其用法。 1. **数值函数**: - `ABS(x)`:返回给定数值的绝对值。 - `...
### HEXTORAW/RAWTOHEX函数 - **HEXTORAW**: 十六进制转二进制。 - **RAWTOHEX**: 二进制转十六进制。 - 示例:`SELECT HEXTORAW('13'), RAWTOHEX(19) FROM dual;` ### USERENV函数 - **USERENV**: 获取当前...
Oracle PL/SQL函数是数据库操作中不可或缺的一部分,...以上就是Oracle PL/SQL函数大全中的部分关键函数,它们涵盖了字符串处理、数学运算、日期时间操作以及数据类型转换等多个方面,是数据库开发和管理中常用的工具。
使用`HEXTORAW`和`RAWTOHEX`函数进行十六进制和二进制之间的转换 ```sql -- HEXTORAW 示例 -- RAWTOHEX 示例 ``` `HEXTORAW`函数用于将十六进制字符串转换为二进制数据,而`RAWTOHEX`则执行相反的操作,即将二...
Oracle SQL函数是数据库管理系统Oracle中用于处理数据的内置函数,它们可以帮助用户进行各种计算、转换和数据操作。以下是一些常见的Oracle SQL函数及其用途的详细说明: 1. **ABS(x)** (数值): 返回数字x的绝对值...
- `HEXTORAW()`、`RAWTOHEX()`:十六进制和二进制之间的转换。 - `TO_CHAR()`、`TO_DATE()`、`TO_NUMBER()`:字符串与日期、数字间的转换。 - `TO_MULTI_BYTE()`、`TO_SINGLE_BYTE()`:全角和半角字符的转换。 -...
### DBA成长之路(ORACLE) #### 数据文件 数据文件是Oracle数据库中极其重要的组成部分,它们主要用于...通过以上内容的学习,DBA可以更好地理解Oracle数据库的核心概念和技术,从而更有效地管理和维护数据库系统。
6. **十进制与十六进制转换**:Oracle提供了`TO_NUMBER`和`TO_CHAR`函数进行数值格式的转换,而`HEXTORAW`和`RAWTOHEX`用于十六进制字符串与二进制数据间的转换。 7. **SYS_CONTEXT的使用**:`SYS_CONTEXT`函数用于...
HEXTORAW 和 RAWTOHEX **功能说明**:`HEXTORAW`用于将十六进制字符串转换为RAW数据类型,而`RAWTOHEX`则相反,用于将RAW数据类型转换为十六进制字符串。 **HEXTORAW 示例**: ```sql SELECT hextoraw('abcdef') ...
对于十六进制,可以使用`HEXTORAW`和`RAWTOHEX`函数。 6. **SYS_CONTEXT的用法**:`SYS_CONTEXT`函数用于获取当前会话的上下文信息,例如用户信息、会话ID等。它通常用于实现基于会话的定制或安全策略。 7. **日期...
6. **十进制与十六进制转换**:Oracle提供了`TO_NUMBER`和`TO_CHAR`函数进行数字与字符串的转换,同时,可以使用`HEXTORAW`和`RAWTOHEX`处理十六进制数据。 三、SYS_CONTEXT与日期函数 7. **SYS_CONTEXT用法**:`...
§16.4 过程和函数中的例外处理 282 §16.4.1 使用系统定义的例外处理 282 §16.4.1.1 没有例外处理的缺点 283 §16.4.1.2 使用预定义的例外处理 283 §16.4.2 使用用户定义的例外处理+ 286 §16.4.2.1 定义的用户...
6. **十进制与十六进制转换**:使用`TO_NUMBER()`和`TO_CHAR()`函数,配合`HEXTORAW()`和`RAWTOHEX()`函数进行不同进制间的转换。 7. **SYS_CONTEXT的使用**:`SYS_CONTEXT`函数用于获取会话级别的上下文信息,如...