近日在研究v$latch视图时,发现一个从未见过的数据类型。v$latch 中ADDR属性的数据类型为RAW(4|8)  同时也发现v$process中的ADDR属性的数据类型也为RAW(4|8)。于是查了一下oracle 的SQL Language Reference文档,文档如下描述:

The RAW and LONG RAW data types store data that is notto be explicitly converted by Oracle Database when moving data between differentsystems. These data types are intended for binary data or byte strings.For example, you can use LONG RAW to store graphics,sound, documents, or arrays of binary data, for which the interpretation isdependent on the use.

Oracle strongly recommends that you convertLONG RAW columns to binary LOB (BLOB) columns. LOB columns are subject to farfewer restrictions than LONG columns. See TO_LOB for more information.

RAW is a variable-lengthdata type like VARCHAR2, except that Oracle Net (whichconnects client software to a database or one database to another) and theOracle import and export utilities do not perform character conversion whentransmitting RAW or LONG RAW data. In contrast, Oracle Net and the Oracleimport and export utilities automatically convert CHAR, VARCHAR2, and LONG databetween different database character sets, if data is transported betweendatabases, or between the database character set and the client character set,if data is transported between a database and a client. The client characterset is determined by the type of the client interface, such as OCI or JDBC, andthe client configuration (for example, the NLS_LANG environment variable).

When Oracle implicitlyconverts RAW or LONG RAW data to CHAR data, the resulting character valuecontains a hexadecimal representation of the binary input, where each character is a hexadecimal digit (0-9, A-F)representing four consecutive bits of RAW data. For example, one byte of RAWdata with bits 11001011 becomes the value CB.

When Oracle implicitly converts CHAR datato RAW or LONG RAW, it interprets each consecutive input character as ahexadecimal representation of four consecutive bits of binary data and buildsthe resulting RAW or LONG RAW value by concatenating those bits. If any of theinput characters is not a hexadecimal digit (0-9, A-F, a-f), then an error isreported. If the number of characters is odd, then the result is undefined.

The SQL functions RAWTOHEX and HEXTORAWperform explicit conversions that are equivalent to the above implicitconversions. Other types of conversions between RAW and CHAR data are possiblewith functions in the Oracle-supplied PL/SQL packages UTL_RAW and UTL_I18N

大概意思是该数据类型用于存储二进制格式的数据,像图像,声音,文档等等,但是oracle建议使用lob替代raw,LOB列比LONG受到更少的限制

Raw的优势: 在网络传输,或者使用导入导出工具时,oracle服务器不执行字符集转换,这样在数据库的效率上会有所提高,而且不会因为字符集不同而导致数据的不一致性

以下引用网友的测试,来说明Oracle implicitly converts RAW or LONG RAW data to CHAR data,the resulting character value contains a hexadecimal representation of thebinary input以及UTL_RAW的使用

RAW,类似于VARCHAR2,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。

LONGRAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节

测试:

SQL>create table datatype_test_raw(paddr raw(8));

Tablecreated

SQL>insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw(‘This is a rawtype test!‘));

insertinto datatype_test_raw(paddr) values(utl_raw.cast_to_raw(‘This is a raw typetest!‘))

ORA-01401:inserted value too large for column

SQL>alter table datatype_test_raw modify paddr raw(20);

Tablealtered

SQL>insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw(‘This is a rawtype test!‘));

insertinto datatype_test_raw(paddr) values(utl_raw.cast_to_raw(‘This is a raw typetest!‘))

ORA-01401:inserted value too large for column

SQL>insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw(‘This is a rawtest!‘));

1row inserted

SQL>commit;

Commitcomplete

SQL>select * from datatype_test_raw;

PADDR

----------------------------------------

54686973206973206120726177207465737421

SQL>select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

UTL_RAW.CAST_TO_VARCHAR2(PADDR

--------------------------------------------------------------------------------

Thisis a raw test!

SQL>insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw(‘中文测试‘));

1row inserted

SQL>commit;

Commitcomplete

SQL>select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

UTL_RAW.CAST_TO_VARCHAR2(PADDR

--------------------------------------------------------------------------------

Thisis a raw test!

中文测试

SQL>select paddr, utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

PADDR                          UTL_RAW.CAST_TO_VARCHAR2(PADDR

------------------------------------------------------------------------------------------------------------------------

54686973206973206120726177207465737421This is a raw test!

D6D0CEC4B2E2CAD4中文测试

这里用到了两个函数:

utl_raw.cast_to_raw([varchar2]);--将varchar2转换为raw类型

utl_raw.cast_to_varchar2([raw]);--将raw转换为varchar2类型

这里varchar2的字符集一般是GB2312。

另外:

utl_raw包的几个其他的函数用法:

utl_raw.cast_from_number([number]);

utl_raw.cast_to_number([number]);

位操作:

utl_raw.bit_or();

utl_raw.bit_and();

utl_raw.bit_xor();

另外还有转换函数:

hextoraw();--将对应16进制数转换为raw

关于raw和utl_raw的介绍到此结束。

oracle中RAW数据类型

标签:repo   tween   select   create   call   different   sys   ast   ddr

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:https://www.cnblogs.com/tewuapple/p/8352200.html

oracle中raw是什么格式,oracle中RAW数据类型相关推荐

  1. 在html中主要支持的音频格式,html5中audio支持音频格式

    HTML5 Audio标签能够支持wav, mp3, ogg, acc, webm等格式,但有个很重要的音乐文件格式midi(扩展名mid)却在各大浏览器中都没有内置的支持.不是所有的浏览器都支持MP ...

  2. java html中引入视频的格式_HTML中插入视频

    最常用的向HTML中插入视频的方法有两种,一种是古老的标签,一种是html5中的标签. 前者的兼容性没得说,但是使用起来不太方便,后者使用起来很方便,但是兼容性让人头疼. 虽然后者兼容性存在很多问题, ...

  3. sqlserver中如何提取datetime格式数据中的日期或时间?

    问: 比如:2004-6-6 6:6:6 我想分别得到 2004-6-6 和6:6:6 怎么处理啊? _________________________________________________ ...

  4. java中的for语句格式_Java中foreach循环语句的格式可以写成(        )。

    [其它]1) 了解. 收集.整理 原研哉生平.设计理念及经典代表作 (可交) 2) google baidu 简洁的页面 丰富的变化 收集 (可交 ) [单选题]ABS 塑料通常用于 Jaguar L ...

  5. python中for循环语句格式_python中for循环和可迭代对象遍历

    #for循环和可迭代对象遍历 ''' for循环通常用于可迭代对象的遍历,for循环的语法格式如下: for 变量 in 可迭代对象 循环体语句 操作:遍历一个元组.集合.字典.字符串 ''' for ...

  6. php中的break语句格式,PHP中break语句的应用

    一 实例 使用break关键字跳出多重循环 while(true){ for(;;){ for($i=1;$i<=4;$i++){ echo $i." "."\t& ...

  7. oracle:todate,oracle日期格式,oracle todate

    oracle日期格式,oracle todate,ORACLE 日期格式 1.查询表中日期字段,并让其以想要的日期格式显示: oracle中varchar类型的日期格式转换date类型: SELECT ...

  8. html5怎么写资料年月日,公文写作中的日期书写格式

    公文写作中的日期书写格式 文件中的日期书写格式应为: 一.公历日期标准格式为:2007年2月6日:或:2007-02-06. 中文(农历)日期标准格式为:二〇〇七年二月六日,或:*戌年腊月十九日. 二 ...

  9. Redhat 中裸设备(raw) 的配置和oracle中使用

    1.对磁盘进行分区 fdisk -l 查看磁盘情况 fdisk /dev/sdb 进行分区操作 2.配置裸设备(修改/etc/udev/rules.d/60-raw.rules文件) 在redhat5 ...

最新文章

  1. 转换图像分辨率c++代码_哈工大等提出轻量级盲超分辨模型LESRCNN,代码已开源...
  2. 手机端登陆github产生ssl handshake aborted error如何解决?
  3. 命令执行无回显的一些姿势
  4. linux文件软链接与硬链接
  5. 帮助孩子学会感恩_页数204_出版日期2015.03_完整版PDF电子书下载
  6. jsapi支付签名_微信支付JSAPI:商户签名错误
  7. java 编译class_.java文件怎样编译成.class文件,你值得一看的技巧
  8. 如何让Java文件在虚拟机中运行_深入理解JVM--Java程序如何在虚拟机中运行
  9. mysql 时间查询_MYSQL按时间段查询语句大全
  10. Studio 3T for MogoDB调整字体大小
  11. android 增大日志缓存
  12. 接呀呀云实时语音SDK总结
  13. C语言中三个数比较大小详解——三种方法
  14. python立方根求解_计算python中的立方根
  15. android 百度地图 itemizedoverlay,[008] 百度地图API之ItemizedOverlay的使用(Android) .
  16. 如何锻炼自己的口才?
  17. libjpeg库使用
  18. 2019.03.30【NOIP提高组】模拟 B 组 排序、二分+spfa、树形DP+前缀和
  19. rust: 引用第三方库(Cargo.toml、Cargo.lock文件)
  20. 江门晚造粮食(水稻)扩种1万亩 国稻种芯:“以晚补早”夺丰收

热门文章

  1. 雅特力AT32F403A, 国产芯片PIN TO PIN 替代STM32F103
  2. 【通信原理】复习笔记
  3. CSS3 实现 Loading 动画
  4. itpub上的ORACLE之常用FAQ V1.0(转)
  5. XXL-JOB - 调度中心和执行器的简单使用
  6. 数据回顾东京奥运会中国体育代表团金牌时刻
  7. 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联
  8. 手把手教你学51单片机——函数进阶与按键
  9. java导出jar包后,程序运行时读取图片、音乐资源文件
  10. 排名前十的仓库管理系统大盘点(真实测评)!