Oracle RAW类型基本操作函数及使用示例
来源:互联网 发布:群智能算法应用 编辑:程序博客网 时间:2024/05/17 08:55
RAW类型是Oracle中用于保存位串的一种数据类型,类似于CHAR,使用RAW(L) 方式声明,最长可达32767字节。
系统提供了一个SYS.utl_raw工具包用于RAW类型的操作,常用的函数如下:
1、长度计算函数,得到一个raw类型变量的长度,单位为字节
FUNCTIONlength(rINRAW)RETURNNUMBER;
如:
selectutl_raw.length('12344321')fromdual;
结果为:4
2、拼接函数,用于拼接两个raw类型变量
FUNCTIONconcat(r1 INRAWDEFAULTNULL,
r2 INRAWDEFAULTNULL,
r3 INRAWDEFAULTNULL,
r4 INRAWDEFAULTNULL,
r5 INRAWDEFAULTNULL,
r6 INRAWDEFAULTNULL,
r7 INRAWDEFAULTNULL,
r8 INRAWDEFAULTNULL,
r9 INRAWDEFAULTNULL,
r10INRAWDEFAULTNULL,
r11INRAWDEFAULTNULL,
r12INRAWDEFAULTNULL)RETURNRAW;
如:
selectutl_raw.concat('12','34')fromdual;
结果为:1234
3、获取子串函数
FUNCTIONsubstr(r INRAW,
posINBINARY_INTEGER,
lenINBINARY_INTEGERDEFAULTNULL)RETURNRAW;
如:
selectutl_raw.substr('12344321',2,1)fromdual;
结果为:34
4、位操作函数
FUNCTIONbit_and(r1INRAW,
r2INRAW)RETURNRAW;
FUNCTIONbit_or(r1INRAW,
r2INRAW)RETURNRAW;
FUNCTIONbit_xor(r1INRAW,
r2INRAW)RETURNRAW;
如:
selectutl_raw.bit_and('12344321','0f')fromdual;
selectutl_raw.bit_or('12344321','0f')fromdual;
selectutl_raw.bit_xor('12344321','0f')fromdual;
结果分别为:
02344321、1F344321、1D344321
5、给指定字节赋值
FUNCTIONoverlay(overlay_strINRAW,
target INRAW,
pos INBINARY_INTEGERDEFAULT1,
len INBINARY_INTEGERDEFAULTNULL,
pad INRAW DEFAULTNULL)RETURNRAW;
如:
select utl_raw.overlay('aa','12344321',2,1) from dual;
结果为:12AA4321
6、类型转换函数
FUNCTIONcast_to_raw(cINVARCHAR2CHARACTERSETANY_CS)RETURNRAW;
FUNCTIONcast_to_varchar2(rINRAW)RETURNVARCHAR2;
FUNCTIONcast_to_nvarchar2(rINRAW)RETURNNVARCHAR2;
FUNCTIONcast_to_number(rINRAW)RETURNNUMBER;
FUNCTIONcast_from_number(nINNUMBER)RETURNRAW;
FUNCTIONcast_to_binary_integer(rINRAW,
endianessINPLS_INTEGER
DEFAULT1)
RETURNBINARY_INTEGER;
FUNCTIONcast_from_binary_integer(n INBINARY_INTEGER,
endianessINPLS_INTEGER
DEFAULT1)
RETURNRAW;
FUNCTIONcast_from_binary_float(n INBINARY_FLOAT,
endianessINPLS_INTEGER
DEFAULT1)
RETURNRAW;
FUNCTIONcast_to_binary_float(rINRAW,
endianessINPLS_INTEGER
DEFAULT1)
RETURNBINARY_FLOAT;
FUNCTIONcast_from_binary_double(n INBINARY_DOUBLE,
endianessINPLS_INTEGER
DEFAULT1)
RETURNRAW;
FUNCTIONcast_to_binary_double(rINRAW,
endianessINPLS_INTEGER
DEFAULT1)
RETURNBINARY_DOUBLE;
7、其他函数
指定值替换
FUNCTIONtranslate(r INRAW,
from_setINRAW,
to_set INRAW)RETURNRAW;
指定值替换,长度不足填充
FUNCTIONtransliterate(r INRAW,
to_set INRAWDEFAULTNULL,
from_setINRAWDEFAULTNULL,
pad INRAWDEFAULTNULL)RETURNRAW;
复制函数
FUNCTIONcopies(rINRAW,
nINNUMBER)RETURNRAW;
得到指定范围内值组成的串
FUNCTIONxrange(start_byteINRAWDEFAULTNULL,
end_byte INRAWDEFAULTNULL)RETURNRAW;
反转函数
FUNCTIONreverse(rINRAW)RETURNRAW;
比较函数
FUNCTIONcompare(r1 INRAW,
r2 INRAW,
padINRAWDEFAULTNULL) RETURNNUMBER;
转换函数
FUNCTIONconvert(r INRAW,
to_charset INVARCHAR2,
from_charsetINVARCHAR2)RETURNRAW;
按位求余函数
FUNCTIONbit_complement(rINRAW)RETURNRAW;
下面是一个小例子,求出指定raw类型数值中0位所在的位置及总位数。
-- Created on 2017/5/17 by ADMINISTRATOR declare -- Local variables here i integer; j integer; len number(3) := 0; pos number(3) := 0; count1 number(3) := 0; vec RAW(32) := 'FF11AA3344DDEEBBAA11998855367833FF11AA3344DDEEBBAA11998855367833'; nvec RAW(4); nvec2 RAW(4); v_start TIMESTAMP(8) ; v_end TIMESTAMP(8) ; v_interval INTERVAL DAY TO SECOND; begin -- Test statements here len := utl_raw.length(vec); DBMS_OUTPUT.put_line('Vector = ' || vec); v_start := sysdate; DBMS_OUTPUT.put_line('v_start = ' || v_start); for i in 1..len LOOP nvec := utl_raw.substr(vec,i,1); IF utl_raw.compare(nvec,'ff') != 0 THEN FOR j IN 1..8 LOOP nvec2 := utl_raw.substr(utl_raw.cast_from_binary_integer(1*power(2,(8-j))),4,1); IF utl_raw.bit_and(nvec, nvec2) != nvec2 THEN pos := 8*(i-1)+j; count1 := count1 + 1; DBMS_OUTPUT.put_line('pos = ' || pos); END IF; END LOOP; END IF; END LOOP; DBMS_OUTPUT.put_line('count1 = ' || count1); v_end := sysdate; DBMS_OUTPUT.put_line('v_end = ' || v_end); v_interval := (v_end - v_start) DAY TO SECOND; DBMS_OUTPUT.put_line('v_interval = ' || v_interval);end;
计算结果如下:
Vector = FF11AA3344DDEEBBAA11998855367833FF11AA3344DDEEBBAA11998855367833
v_start = 18-5月 -17 02.03.12.00000000 下午
pos = 9
pos = 10
pos = 11
pos = 13
pos = 14
pos = 15
pos = 18
pos = 20
pos = 22
pos = 24
pos = 25
pos = 26
pos = 29
pos = 30
pos = 33
pos = 35
pos = 36
pos = 37
pos = 39
pos = 40
pos = 43
pos = 47
pos = 52
pos = 56
pos = 58
pos = 62
pos = 66
pos = 68
pos = 70
pos = 72
pos = 73
pos = 74
pos = 75
pos = 77
pos = 78
pos = 79
pos = 82
pos = 83
pos = 86
pos = 87
pos = 90
pos = 91
pos = 92
pos = 94
pos = 95
pos = 96
pos = 97
pos = 99
pos = 101
pos = 103
pos = 105
pos = 106
pos = 109
pos = 112
pos = 113
pos = 118
pos = 119
pos = 120
pos = 121
pos = 122
pos = 125
pos = 126
pos = 137
pos = 138
pos = 139
pos = 141
pos = 142
pos = 143
pos = 146
pos = 148
pos = 150
pos = 152
pos = 153
pos = 154
pos = 157
pos = 158
pos = 161
pos = 163
pos = 164
pos = 165
pos = 167
pos = 168
pos = 171
pos = 175
pos = 180
pos = 184
pos = 186
pos = 190
pos = 194
pos = 196
pos = 198
pos = 200
pos = 201
pos = 202
pos = 203
pos = 205
pos = 206
pos = 207
pos = 210
pos = 211
pos = 214
pos = 215
pos = 218
pos = 219
pos = 220
pos = 222
pos = 223
pos = 224
pos = 225
pos = 227
pos = 229
pos = 231
pos = 233
pos = 234
pos = 237
pos = 240
pos = 241
pos = 246
pos = 247
pos = 248
pos = 249
pos = 250
pos = 253
pos = 254
count1 = 124
v_end = 18-5月 -17 02.03.12.00000000 下午
v_interval = +00 00:00:00.000000
v_start = 18-5月 -17 02.03.12.00000000 下午
pos = 9
pos = 10
pos = 11
pos = 13
pos = 14
pos = 15
pos = 18
pos = 20
pos = 22
pos = 24
pos = 25
pos = 26
pos = 29
pos = 30
pos = 33
pos = 35
pos = 36
pos = 37
pos = 39
pos = 40
pos = 43
pos = 47
pos = 52
pos = 56
pos = 58
pos = 62
pos = 66
pos = 68
pos = 70
pos = 72
pos = 73
pos = 74
pos = 75
pos = 77
pos = 78
pos = 79
pos = 82
pos = 83
pos = 86
pos = 87
pos = 90
pos = 91
pos = 92
pos = 94
pos = 95
pos = 96
pos = 97
pos = 99
pos = 101
pos = 103
pos = 105
pos = 106
pos = 109
pos = 112
pos = 113
pos = 118
pos = 119
pos = 120
pos = 121
pos = 122
pos = 125
pos = 126
pos = 137
pos = 138
pos = 139
pos = 141
pos = 142
pos = 143
pos = 146
pos = 148
pos = 150
pos = 152
pos = 153
pos = 154
pos = 157
pos = 158
pos = 161
pos = 163
pos = 164
pos = 165
pos = 167
pos = 168
pos = 171
pos = 175
pos = 180
pos = 184
pos = 186
pos = 190
pos = 194
pos = 196
pos = 198
pos = 200
pos = 201
pos = 202
pos = 203
pos = 205
pos = 206
pos = 207
pos = 210
pos = 211
pos = 214
pos = 215
pos = 218
pos = 219
pos = 220
pos = 222
pos = 223
pos = 224
pos = 225
pos = 227
pos = 229
pos = 231
pos = 233
pos = 234
pos = 237
pos = 240
pos = 241
pos = 246
pos = 247
pos = 248
pos = 249
pos = 250
pos = 253
pos = 254
count1 = 124
v_end = 18-5月 -17 02.03.12.00000000 下午
v_interval = +00 00:00:00.000000
阅读全文
1 0
- Oracle RAW类型基本操作函数及使用示例
- Oracle基本数据类型—RAW类型
- Oracle数据库的基本操作及使用
- scss基本使用及操作函数
- oracle: Raw类型解释
- Oracle中的Raw类型
- oracle中的RAW类型
- oracle中的raw类型
- oracle raw类型
- SQL基本操作及示例
- oracle常用函数及示例
- Oracle中的Raw类型解释
- Oracle中的Raw类型解释
- Oracle中的Raw类型解释
- Oracle Function基本语法及示例
- Spark 安装配置及基本操作示例
- oracle的基本操作函数
- linux不带缓冲的文件操作基本函数及用法示例
- c++类的继承与派生的基本概念和语法
- Altium小技巧之如何批量添加器件封装
- 分享】读取properties配置文件的方法汇总
- Ubuntu下Vue.js+webpack的安装(nodejs版本纠正)
- 面试题目汇总(JAVA算法/数据结构)
- Oracle RAW类型基本操作函数及使用示例
- Echarts之地图自定义lable文本标签&去掉小点
- Centos7安装并配置mysql5.6完美教程
- node与javascriptAES加密
- zabbix
- Linux tty驱动程序<一> 架构
- Deconvolutional network
- CodeIgniter 入门教程第一篇:信息发布
- Android 开发笔记——通过 Intent 传递类对象