`
tianyihuyidao9
  • 浏览: 165947 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

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函数,应该避免隐式转换,而在编写代码时总是使用显示转换,这是一个很好的实践做法!
分享到:
评论

相关推荐

    oracle函数大全

    描述中还提到了“字符类型转换”和“十六精致构成转化二进制”,这涉及到Oracle中的字符函数和转换函数。 Oracle中用于字符类型转换的函数很多,例如TO_CHAR、TO_NUMBER等。TO_CHAR函数可以将数值或日期转换为字符...

    Oracle函数大全.pdf

    Oracle提供了一系列的函数,用于处理不同类型的数据,如字符串、数字、日期和时间等。下面按照文档所提供的内容,详细解读各个函数以及相关知识点: ### 第一章 字符串大全 字符串函数用于对字符数据进行处理。 -...

    oracle系统内置函数大全

    4. RAWTOHEX函数:将 RAW 类型转换为十六进制字符串。 5. ROWIDTOCHAR函数:将 ROWID 转换为字符类型。 6. TO_CHAR函数:将数字、日期类型的数据转换为字符类型。 7. TO_DATE函数:将字符类型的数据转换为日期类型。...

    oracle函数库

    ### Oracle函数库详解 #### 一、字符串处理函数 **1. ASCII('字符')** - **功能**: 返回指定字符的ASCII码(十进制数)。 - **示例**: `SELECT ASCII('A') FROM DUAL;` 返回结果为 `65`。 **2. CHR(数字)** - **...

    Oracle函数大全

    - `RAWTOHEX` 和 `HEXTORAW`:在十六进制字符串和RAW类型之间转换。 5. **条件判断函数**: - `CASE`:根据条件返回不同的值。 - `DECODE`:类似IF-THEN-ELSE的简写形式。 6. **聚合函数**: - `COUNT`:计算...

    oracle函数及其用法

    Oracle数据库系统提供了丰富的内置函数,这些函数用于处理各种数据类型,包括数值、字符和日期等。下面我们将详细探讨一些常见的Oracle函数及其用法。 1. **数值函数**: - `ABS(x)`:返回给定数值的绝对值。 - `...

    oracle常用函数

    ### HEXTORAW/RAWTOHEX函数 - **HEXTORAW**: 十六进制转二进制。 - **RAWTOHEX**: 二进制转十六进制。 - 示例:`SELECT HEXTORAW('13'), RAWTOHEX(19) FROM dual;` ### USERENV函数 - **USERENV**: 获取当前...

    oracle plsql函数大全

    Oracle PL/SQL函数是数据库操作中不可或缺的一部分,...以上就是Oracle PL/SQL函数大全中的部分关键函数,它们涵盖了字符串处理、数学运算、日期时间操作以及数据类型转换等多个方面,是数据库开发和管理中常用的工具。

    oracle代码包括查询,子查询,,,

    使用`HEXTORAW`和`RAWTOHEX`函数进行十六进制和二进制之间的转换 ```sql -- HEXTORAW 示例 -- RAWTOHEX 示例 ``` `HEXTORAW`函数用于将十六进制字符串转换为二进制数据,而`RAWTOHEX`则执行相反的操作,即将二...

    oracle_sql函数

    Oracle SQL函数是数据库管理系统Oracle中用于处理数据的内置函数,它们可以帮助用户进行各种计算、转换和数据操作。以下是一些常见的Oracle SQL函数及其用途的详细说明: 1. **ABS(x)** (数值): 返回数字x的绝对值...

    oracle日常命令.docx

    - `HEXTORAW()`、`RAWTOHEX()`:十六进制和二进制之间的转换。 - `TO_CHAR()`、`TO_DATE()`、`TO_NUMBER()`:字符串与日期、数字间的转换。 - `TO_MULTI_BYTE()`、`TO_SINGLE_BYTE()`:全角和半角字符的转换。 -...

    DBA成长之路(ORACLE)

    ### DBA成长之路(ORACLE) #### 数据文件 数据文件是Oracle数据库中极其重要的组成部分,它们主要用于...通过以上内容的学习,DBA可以更好地理解Oracle数据库的核心概念和技术,从而更有效地管理和维护数据库系统。

    富士通内部培训ORACLE资料

    6. **十进制与十六进制转换**:Oracle提供了`TO_NUMBER`和`TO_CHAR`函数进行数值格式的转换,而`HEXTORAW`和`RAWTOHEX`用于十六进制字符串与二进制数据间的转换。 7. **SYS_CONTEXT的使用**:`SYS_CONTEXT`函数用于...

    Oracle关键字用法整合

    HEXTORAW 和 RAWTOHEX **功能说明**:`HEXTORAW`用于将十六进制字符串转换为RAW数据类型,而`RAWTOHEX`则相反,用于将RAW数据类型转换为十六进制字符串。 **HEXTORAW 示例**: ```sql SELECT hextoraw('abcdef') ...

    oracle常用FAQ集锦.doc

    对于十六进制,可以使用`HEXTORAW`和`RAWTOHEX`函数。 6. **SYS_CONTEXT的用法**:`SYS_CONTEXT`函数用于获取当前会话的上下文信息,例如用户信息、会话ID等。它通常用于实现基于会话的定制或安全策略。 7. **日期...

    oracle之常用faq.doc

    6. **十进制与十六进制转换**:Oracle提供了`TO_NUMBER`和`TO_CHAR`函数进行数字与字符串的转换,同时,可以使用`HEXTORAW`和`RAWTOHEX`处理十六进制数据。 三、SYS_CONTEXT与日期函数 7. **SYS_CONTEXT用法**:`...

    Oracle8i_9i数据库基础

    §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 定义的用户...

    oracle chm帮助文件下载

    6. **十进制与十六进制转换**:使用`TO_NUMBER()`和`TO_CHAR()`函数,配合`HEXTORAW()`和`RAWTOHEX()`函数进行不同进制间的转换。 7. **SYS_CONTEXT的使用**:`SYS_CONTEXT`函数用于获取会话级别的上下文信息,如...

Global site tag (gtag.js) - Google Analytics