ORACLE使用函数对二进制、十进制、十六进制数互相转换(二)

2014-11-24 12:04:14 · 作者: · 浏览: 1
at line 1:
ORA-00904: : invalid identifier
将函数执行权限授予PUBLIC,此时从其它用户可以正常使用函数。
TEST@bys1>conn bys/bys
Connected.
BYS@bys1>grant execute on number_to_bit to public;
Grant succeeded.
BYS@bys1>conn test/test
Connected.
TEST@bys1>select number_to_bit(255) from dual;
NUMBER_TO_BIT(255)
----------------------------------------------------------------------------------------------------
11111111
#########################
对于bit_to_number函数,先将函数执行权限授予PUBLIC,但是并未创建同义词。此时使用其它用户执行函数报错
BYS@bys1>grant execute on bit_to_number to public;
Grant succeeded.
TEST1@bys1>select bit_to_number(11111111) from dual;
select bit_to_number(11111111) from dual
*
ERROR at line 1:
ORA-00904: "BIT_TO_NUMBER": invalid identifier
TEST1@bys1>conn bys/bys
Connected.
此时对函数创建公有同义词,使用其它用户可以正常执行函数。
BYS@bys1>create public synonym bit_to_number for bit_to_number;
Synonym created.
BYS@bys1>conn test1/test1
Connected.
TEST1@bys1>select bit_to_number(11111111) from dual;
BIT_TO_NUMBER(11111111)
-----------------------
255
###################################################################
6.二进制与十六进制的转换
因为没有直接的函数,但是结合以上的十进制转二进制与十进制转十六进制函数,可以通过函数嵌套来实现二进制与十六进制的转换。
即先使用二进制与十进制的转换,再将转换成的十进制做为参数转换为十六进制。
BYS@bys1>select number_to_bit(17) as a255 from dual;
A255
--------------------
00010001
下面语句得出16进制数11,换算成十进制是17,转换正确完成。
BYS@bys1>select to_char(bit_to_number('00010001'),'xxx') from dual;
TO_C
----
11
7.十六进制与二进制的转换
BYS@bys1> select to_number('11','xxx') from dual;
TO_NUMBER('11','XXX')
---------------------
17
下面语句可以将16进制转成二进制,与上面语句对比,转换结果正确。
BYS@bys1> select number_to_bit(to_number('11','xxx')) from dual;
NUMBER_TO_BIT(TO_NUMBER('11','XXX'))
----------------------------------------------------------------------------------------------------
00010001
##############################################################################
8.其它转换函数:
HEXTORAW
语法: HEXTORAW(string)
功能: 将由string表示的二进制数值转换为一个RAW数值. String应该包含一个十六进制的数值. String中的每两个字符表示了结果RAW中的一个字节..HEXTORAW和RAWTOHEX为相反的两个函数.
使用位置: 过程性语言和SQL语句。
BYS@bys1>select hextoraw('abcdef') from dual;
HEXTOR
------
ABCDEF
RAWTOHEX
语法: RAWTOHEX(rawvalue)
功能: 将RAW类数值rawvalue转换为一个相应的十六进制表示的字符串. rawvalue中的每个字节都被转换为一个双字节的字符串. RAWTOHEX和HEXTORAW是两个相反的函数.
使用位置: 过程性语言和SQL语句。
BYS@bys1>SELECT RAWTOHEX('11') FROM DUAL;
RAWT
----
3131
BYS@bys1>SELECT RAWTOHEX('1') FROM DUAL;
RA
--
31
BYS@bys1>SELECT RAWTOHEX('2') FROM DUAL;
RA
--
32
RAWTONHEX
语法: RAWTONHEX(rawvalue)
功能: 将RAW类型值rawvalue转换为一个十六进制表示的字符串。rawvalue中的每个字节转换为一个双字符的字符串。RAWTONHEX返回值是NVARCHAR2类型而不是VARCHAR2类型。
使用位置: 过程性语言和SQL语句。