Oracle rawtohex hextoraw

Oracle   8.1.7 

SQL>   ed 
已写入文件   afiedt.buf 

    1     declare 
    2         a   varchar2(100); 
    3     begin 
    4         select   rawtohex( 'aaaa ')   into   a   from   dual; 
    5         dbms_output.put_line(a); 
    6*   end; 
SQL>   / 
61616161                           --结果正确! 

PL/SQL   过程已成功完成。 

SQL>   ed 
已写入文件   afiedt.buf 

    1     declare 
    2         a   varchar2(100); 
    3     begin 
    4         a:=rawtohex( 'aaaa '); 
    5         dbms_output.put_line(a); 
    6*   end; 
SQL>   / 
AAAA                                       --结果显然错误! 

PL/SQL   过程已成功完成。 

 

我估计是oracle内部类型转换的问题 

这样可以 
11:32:36   SQL>   select   to_char(   rawtohex( 'aaaa '))   from   dual; 

TO_CHAR( 
-------- 
61616161 

但这样就不行了 
11:32:22   SQL>   declare 
11:32:35       2     a   varchar2(100); 
11:32:35       3     begin 
11:32:35       4     a:=to_char(   rawtohex( 'aaaa ')); 
11:32:35       5     dbms_output.put_line(a); 
11:32:35       6     end; 
11:32:35       7     / 
declare 
* 
ERROR   位于第1行: 
ORA-06550:   第   4   行,   第   4   列: 
PLS-00307:   有太多的   'TO_CHAR '   说明与此次调用相匹配 
ORA-06550:   第   4   行,   第   1   列: 
PL/SQL:   Statement   ignored 

 

RAWTOHEX   is   a   SQL   function,   as   opposed   to   a   PL/SQL   function,   and   must   be   used   in   a   SQL   statement.   SQL   has   no   concept   of   an   assignment   opperator,   :=.   

So   change   
l_strng   :=   RAWTOHEX........   
to   
SELECT   RAWTOHEX(p_string)   INTO   l_string   FROM   dual;   

 

RAWTOHEX   函数确实是SQL函数,我经过了多次测试,得到的结果与你相同,按说rawtohex既然为sql函数,执行   a:=rawtohex( 'aaaa ')时就应该报错,至于oracle为什么不报错,我也说不清楚,也许真的有两个版本。总之你知道就行了。


似乎a:=rawtohex(x)大致相当于select   rawtohex(hextoraw(x))   into   a 

 

HEXTORAW
语法:  HEXTORAW(string)
功能: 将由string表示的二进制数值转换为一个RAW数值. String应该包含一个十六进制的数值. String中的每两个字符表示了结果RAW中的一个字节..HEXTORAW和RAWTOHEX为相反的两个函数.
使用位置: 过程性语言和SQL语句。
 
RAWTOHEX
语法: RAWTOHEX(rawvalue)
功能:  将RAW类数值rawvalue转换为一个相应的十六进制表示的字符串. rawvalue中的每个字节都被转换为一个双字节的字符串. RAWTOHEX和HEXTORAW是两个相反的函数.
使用位置: 过程性语言和SQL语句。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值