UTL_RAW 包

为了在DM上兼容oracle的utl_raw包,提供功能上与oracle基本一致的utl_raw包。利用这个包提供将十六进制类型转化为其它数据类型的函数和一系列十六进制类型相关函数。

30.1 相关方法

utl_raw包所支持的20个函数,分别实现十六进制的相关转化函数。这些函数通过调用相应系统内部函数来实现存取数据的过程。如下详细介绍各函数:

  1. XRANGE

输出包含start~end在内的,十六进制单字节区间内的全部字节。

语法如下:

FUNCTION xrange(

	start_byte IN varbinary DEFAULT NULL,

	end_byte IN varbinary DEFAULT NULL

) RETURN varbinary;

参数详解

  • start输入参数,单字节varbinary数据。
  • end输入参数,单字节varbinary数据。

注意:1)要求start和end都是单字节。若超过了一个字节,则只从左取第一个高位字节;2)如果start值>end值,则返回以start十六进制字节开始的,通过FF至00,再到end的全部十六进制字节;3)如果start为null默认为00,end为null默认为FF,二者均为null则start默认为00,end默认为FF。

  1. BIT_AND

输出r1与r2的按位运算的逻辑与。

语法如下:

FUNCTION bit_and(

	r1 IN varbinary,

	r2 IN varbinary

) RETURN varbinary;

参数详解

  • r1输入参数,varbinary数据。
  • r2输入参数,varbinary数据。

注意:如果r1、r2长度不等,则对长度较小的参数低位补0XFF字节至与另一个参数对齐后再做按位运算。

3 BIT_COMPLEMENT

输出r的按位运算的反码。

语法如下:

FUNCTION bit_complement(

	r IN varbinary

) RETURN varbinary;

参数详解

  • R输入参数,varbinary数据。
  1. BIT_OR

输出r1与r2的按位运算的逻辑或。

语法如下:

FUNCTION BIT_OR(

	r1 IN varbinary,

	r2 IN varbinary

) RETURN varbinary;

参数详解

  • r1输入参数,varbinary数据。
  • r2输入参数,varbinary数据。

注意:如果r1、r2长度不等,则对长度较小的参数低位补0X00字节至与另一个参数对齐后再做按位运算。

  1. BIT_XOR

输出r1与r2的按位运算的逻辑异或。

语法如下:

FUNCTION bit_xor(

	r1 IN varbinary,

	r2 IN varbinary

) RETURN varbinary;

参数详解

  • r1输入参数,varbinary数据。
  • r2输入参数,varbinary数据。

注意:如果r1、r2长度不等,则对长度较小的参数低位补0X00字节至与另一个参数对齐后再做按位运算。

  1. COMPARE

比较十六进制串数据r1和r2。如果r1串长度<
r2串长度,r1串用pad填充至二者长度相等后再作比较。返回结果:数字,表示从几个数字开始不相等。0表示相等。

语法如下:

FUNCTION compare(

	r1 IN varbinary,

	r2 IN varbinary,

	PAD IN VARBINARY,

	lschema_name varchar,

	ltable_name varchar,

	lcol_name varchar,

	rschema_name varchar,

	rtable_name varchar,

	rcol_name varchar

) RETURN NUMBER;

参数详解

  • r1输入参数,varbinary数据。
  • r2输入参数,varbinary数据。
  • PAD输入参数,varbinary数据。
  • lschema_name左数据源串所在模式名。
  • ltable_name左数据源串所在表名。
  • lcol_name左数据源串所在列名。
  • rschema_name右数据源串所在模式名。
  • rtable_name右数据源串所在表名。
  • rcol_name右数据源串所在列名。
  1. CONCAT

按参数顺序分别连接各个十六进制串数。最多可连接12个。返回连接后的十六进制串数值。

语法如下:

FUNCTION concat(

	r1 IN varbinary DEFAULT NULL,

	r2 IN varbinary DEFAULT NULL,

	r3 IN varbinary DEFAULT NULL,

	r4 IN varbinary DEFAULT NULL,

	r5 IN varbinary DEFAULT NULL,

	r6 IN varbinary DEFAULT NULL,

	r7 IN varbinary DEFAULT NULL,

	r8 IN varbinary DEFAULT NULL,

	r9 IN varbinary DEFAULT NULL,

	r10 IN varbinary DEFAULT NULL,

	r11 IN varbinary DEFAULT NULL,

	r12 IN varbinary DEFAULT NULL

) RETURN varbinary;
  1. CONVERT_RAW

将十六进制串数值从后指定的字符集到前指定的字符集转换。

语法如下:

FUNCTION convert_raw (

	r IN varbinary,

	to_charset IN VARCHAR2,

	from_charset IN VARCHAR2

) RETURN varbinary;

参数详解

支持utf8与其它字符集(GBK、BIG5、ISO_8859_9、EUC_JP、EUC_KR、KOI8R、GB18030、SQL_ASCII、ISO_8859_1)的相互转换。

  1. COPIES

将十六进制串数值拷贝n次,依次排在前一个数的后面。返回新的十六进制数值。

语法如下:

FUNCTION copies(

	r IN varbinary,

	n IN NUMBER

) RETURN varbinary;
  1. LENGTH

返回十六进制串的字节长度。

语法如下:

FUNCTION length(

	r IN varbinary

) RETURN NUMBER;
  1. overlay_raw

用十六进制串overlay_str覆盖源十六进制串target中指定的十六进制子串。

语法如下:

FUNCTION overlay_raw(

	overlay_str IN varbinary,

	target IN varbinary,

	pos IN INTEGER DEFAULT 1,

	len IN INTEGER DEFAULT NULL,

	pad IN varbinary DEFAULT NULL

) RETURN varbinary;

参数详解

  • overlay_str十六进制串。
  • target源十六进制串。
  • pos子串在源串target中的起始位置。
  • len子串的长度。
  • pad

overlay_str串长度若小于len或pos超过了target的长度,用pad值代替。

  1. REVERSE_RAW

将输入十六进制串的字符顺序反转后返回。

语法如下:

FUNCTION reverse_RAW (

	r IN varbinary

) RETURN varbinary;
  1. SUBSTR

返回十六进制串中从字节位置POS开始的LEN个字节。

语法如下:

FUNCTION substr(

	r IN varbinary,

	pos IN INTEGER,

	len IN INTEGER DEFAULT NULL

) RETURN varbinary;
  1. TRANSLATE

十六进制替换函数。将R字符串中的from_set串,全部替换成to_set串。

语法如下:

FUNCTION translate(

	r IN varbinary,

	from_set IN varbinary,

	to_set IN varbinary

) RETURN varbinary;

参数详解

  • r源字符串。
  • from_set被替换的字符串。
  • to_set替换后的字符串。
  1. TRANSLITERATE

功能和TRANSLATE一样。

语法如下:

FUNCTION transliterate(

	r IN varbinary,

	to_set IN varbinary DEFAULT NULL,

	from_set IN varbinary DEFAULT NULL,

	pad IN varbinary DEFAULT NULL

) RETURN varbinary;

参数详解

  • pad

如果to_set小于from_set,少的部分用pad值代替。如果pad为null,则转换后的结果为null。

  1. CAST_TO_RAW

ASCII字符转化成十六进制数字。

语法如下:

FUNCTION cast_to_raw(

	c IN VARCHAR2

) RETURN varbinary;
  1. CAST_TO_VARCHAR2

十六进制数字转化成对应的ASCII字符。

语法如下:

FUNCTION cast_to_varchar2(

	r IN varbinary

) RETURN VARCHAR2;
  1. CAST_TO_INT

十六进制数字转化成整型十进制。

语法如下:

FUNCTION cast_to_int(

	r IN varbinary,

	endianess IN INTEGER DEFAULT 1

)RETURN INTEGER;

参数详解

  • Endianess

读取R数据的顺序,取值范围:1、2、3,默认为1。1表示依次从高位向低位读取。2和3表示依次从低位向高位读取。

  1. CAST_FROM_INT

整型十进制转化成十六进制数字。

语法如下:

FUNCTION cast_from_int(

	n IN INTEGER,

	endianess IN INTEGER DEFAULT 1

) RETURN varbinary;
  1. CAST_TO_BINARY_INTEGER

十六进制数字转化成整型十进制。

语法如下:

FUNCTION cast_to_BINARY_INTEGER (

	r IN varbinary,

	endianess IN INTEGER DEFAULT 1

)RETURN INTEGER;

参数详解

  • Endianess

读取R数据的顺序,取值范围:1、2、3,默认为1。1表示使用大端方式。2表示使用小端方式,3表示使用机器的大小端方式。

  1. CAST_FROM_BINARY_INTEGER

整型十进制转化成十六进制数字。

语法如下:

FUNCTION cast_from_BINARY_INTEGER (

	n IN INTEGER,

	endianess IN INTEGER DEFAULT 1

) RETURN varbinary;

参数详解

  • Endianess:

读取R数据的顺序,取值范围:1、2、3,默认为1。1表示使用大端方式。2表示使用小端方式,3表示使用机器的大小端方式。

  1. CAST_TO_BINARY_DOUBLE

十六进制数字转化成DOUBLE。

语法如下:

FUNCTION cast_to_BINARY_DOUBLE (

	r IN varbinary,

	endianess IN INTEGER DEFAULT 1

)RETURN DOUBLE;

参数详解

  • Endianess

读取R数据的顺序,取值范围:1、2、3,默认为1。1表示使用大端方式。2表示使用小端方式,3表示使用机器的大小端方式。

  1. CAST_FROM_BINARY_DOUBLE

DOUBLE转化成十六进制数字。

语法如下:

FUNCTION cast_BINARY_DOUBLE (

	n IN DOUBLE,

	endianess IN INTEGER DEFAULT 1

) RETURN varbinary;

参数详解

  • Endianess

读取R数据的顺序,取值范围:1、2、3,默认为1。1表示使用大端方式。2表示使用小端方式,3表示使用机器的大小端方式。

  1. CAST_TO_BINARY_FLOAT

十六进制数字转化成FLOAT。

语法如下:

FUNCTION CAST_TO_BINARY_FLOAT(

	r IN varbinary,

	endianess IN INTEGER DEFAULT 1

)RETURN FLOAT;

参数详解

  • Endianess

读取R数据的顺序,取值范围:1、2、3,默认为1。1表示使用大端方式。2表示使用小端方式,3表示使用机器的大小端方式。

  1. CAST_FROM_BINARY_FLOAT

FLOAT转化成十六进制数字。

语法如下:

FUNCTION cast_from_BINARY_FLOAT(

	n IN DOUBLE,

	endianess IN INTEGER DEFAULT 1

) RETURN varbinary;

参数详解

  • Endianess

读取R数据的顺序,取值范围:1、2、3,默认为1。1表示使用大端方式。2表示使用小端方式,3表示使用机器的大小端方式。

  1. CAST_TO_NUMBER

十六进制数字转化成NUMBER。

语法如下:

FUNCTION cast_to_NUMBER(

	r IN varbinary,

	endianess IN INTEGER DEFAULT 1

)RETURN NUMBER;

参数详解

  • Endianess

读取R数据的顺序,取值范围:1、2、3,默认为1。1表示使用大端方式。2表示使用小端方式,3表示使用机器的大小端方式。

  1. CAST_FROM_NUMBER

将number类型(dec、decimal)转化成十六进制数据。

语法如下:

FUNCTION cast_from_number(

	n IN NUMBER

) RETURN varbinary;

30.2 举例说明

使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。

SP_CREATE_SYSTEM_PACKAGES (1,'UTL_RAW');

例utl_FILE包的应用。

  1. xrange
select utl_raw.xrange(utl_raw.cast_to_raw('A'),utl_raw.cast_to_raw('Z')) from dual;

询结果:

0x4142434445464748494A4B4C4D4E4F505152535455565758595A
  1. bit_and
select utl_raw.bit_and('0102F3','F30201') from dual;

查询结果:

0x010201
  1. bit_complement
select utl_raw.bit_complement('0102F3') from dual;

查询结果:

0xFEFD0C
  1. bit_or
select utl_raw.bit_or('0102F3','F30201') from dual;

查询结果:

0xF302F3
  1. bit_xor
select utl_raw.bit_xor('0102F3','F30201') from dual;

查询结果:

0xF200F2
  1. compare
select utl_raw.compare(utl_raw.cast_to_raw('ABC'),utl_raw.cast_to_raw('ABCD'))from dual;

查询结果:

4
  1. concat
select utl_raw.concat('A','41','B','42') from dual;

查询结果:

0x0A410B42
  1. convert_raw
select UTL_RAW.CONVERT_raw('E4B8ADE69687', 'GBK', 'UTF8') from dual;

查询结果:

0xD6D0CEC4

select UTL_RAW.CONVERT_raw('D6D0CEC4','UTF8', 'GBK') from dual;

查询结果:

0xE4B8ADE69687
  1. copies
select utl_raw.copies('A',6) from dual;

查询结果:

0x0A0A0A0A0A0A
  1. length
select utl_raw.LEngth(UTL_RAW.CAST_TO_RAW('ABCD')) from dual;

查询结果:

4
  1. overlay_raw
select utl_raw.overlay_raw
(utl_raw.cast_to_raw('D'),utl_raw.cast_to_raw('AAAC'),1,1) from dual;

查询结果:

0x44414143
select
utl_raw.overlay_raw(utl_raw.cast_to_raw('D'),utl_raw.cast_to_raw('AAAC'),1,2,utl_raw.cast_to_raw('
')) from dual;

查询结果:

0x44204143
  1. reverse_raw
select utl_raw.reverse_raw(utl_raw.cast_to_raw('123')) from dual;

查询结果:

0x333231
  1. substr
select utl_raw.substr(0x414243444541424344454142434445,6,2) from dual;

查询结果:

0x4142
  1. translate
select
UTL_RAW.translate(utl_raw.cast_to_raw('aDe'),utl_raw.cast_to_raw('AD'),utl_raw.cast_to_raw('ad'))
from dual;

查询结果:

616465 --即ade
  1. translITERATE

select
UTL_RAW.translITERATE(utl_raw.cast_to_raw('FaDe'),utl_raw.cast_to_raw('adef'),utl_raw.cast_to_raw('ADEF'),utl_raw.cast_to_raw('
')) from dual;

查询结果:

66616465 --即fade
  1. CAST_TO_RAW
select UTL_RAW.CAST_TO_RAW(10) from dual;

查询结果:

0x3130
  1. cast_to_varchar2
select utl_raw.cast_to_varchar2('40') from dual;

查询结果:

@
  1. cast_to_INT
select utl_raw.cast_to_int('00000064',1) from dual;

查询结果:

100

select utl_raw.cast_to_int('00000064',2) from dual;

查询结果:

1677721600
  1. cast_from_INT
select utl_raw.cast_from_int(10) from dual;

查询结果:

0x0000000A

select utl_raw.cast_FROM_int(94311,2) from dual;

查询结果:

0x67700100
  1. cast_from_number
select UTL_RAW.cast_FROM_number(10) from dual;

查询结果:

0xC10B
微信扫码
分享文档
扫一扫
联系客服