和其他数据类型相比,RAW类型的存储显得直观多了,它和SELECT时数据展示的值完全一样。(SELECT时是按照16进制展示的)
SQL>createtabletest_raw(idnumber,raw_dateraw(10));
表已创建。
SQL>insertintotest_rawvalues(1,hextoraw('ff'));
已创建1行。
SQL>droptabletest_raw;
表已丢弃。
SQL>createtabletest_raw(raw_colraw(10));
表已创建。
SQL>insertintotest_rawvalues(hextoraw('ff'));
已创建1行。
SQL>insertintotest_rawvalues(hextoraw('0'));
已创建1行。
SQL>insertintotest_rawvalues(hextoraw('23fc'));
已创建1行。
SQL>insertintotest_rawvalues(hextoraw('fffffffffff'));
已创建1行。
SQL>insertintotest_rawvalues(hextoraw('ffffffffffffffffffff'));
已创建1行。
SQL>insertintotest_rawvalues(utl_raw.cast_to_raw('051'));
已创建1行。
SQL>selectraw_col,dump(raw_col,16)dump_rawfromtest_raw;
RAW_COLDUMP_RAW
-------------------------------------------------------------------
FFTyp=23Len=1:ff
00Typ=23Len=1:0
23FCTyp=23Len=2:23,fc
0FFFFFFFFFFFTyp=23Len=6:f,ff,ff,ff,ff,ff
FFFFFFFFFFFFFFFFFFFFTyp=23Len=10:ff,ff,ff,ff,ff,ff,ff,ff,ff,ff
303531Typ=23Len=3:30,35,31
已选择6行。
RAW类型的存储很简单,对比字段的查询结果和DUMP的结果就一目了然了。
需要注意的是,两种转化为RAW的函数之间的差别。当使用HEXTORAW时,会把字符串中数据当作16进制数。而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中。
SQL>insertintotest_rawvalues('gg');
insertintotest_rawvalues('gg')
*
ERROR位于第1行:
ORA-01465:无效的十六进制数字
SQL>insertintotest_rawvalues(hextoraw('gg'));
insertintotest_rawvalues(hextoraw('gg'))
*
ERROR位于第1行:
ORA-01465:无效的十六进制数字
SQL>insertintotest_rawvalues(utl_raw.cast_to_raw('gg'));
已创建1行。
SQL>selectraw_col,dump(raw_col,16)dump_rawfromtest_raw;
RAW_COLDUMP_RAW
------------------------------------------------------------------
FFTyp=23Len=1:ff
00Typ=23Len=1:0
23FCTyp=23Len=2:23,fc
6767Typ=23Len=2:67,67
0FFFFFFFFFFFTyp=23Len=6:f,ff,ff,ff,ff,ff
FFFFFFFFFFFFFFFFFFFFTyp=23Len=10:ff,ff,ff,ff,ff,ff,ff,ff,ff,ff
303531Typ=23Len=3:30,35,31
已选择7行。
如果觉得《oracle原始数据类型 Oracle基本数据类型存储格式浅析——RAW类型》对你有帮助,请点赞、收藏,并留下你的观点哦!