一、RAW类型回顾
在Oracle数据库中,RAW类型是一种可变长数据类型,一般用于存储二进制数据。在使用RAW类型时,必须指定具体长度,语法如下:
RAW(size)
复制
在SQL场景用作表中的字段时,最大可存储2000字节数据(当且仅当Oracle参数MAX_STRING_SIZE
=
STANDARD时
),而用作PL/SQL场景的变量时,最大可存储32767字节数据。
SQL> show parameter MAX_STRING_SIZE NAME TYPE VALUE ------------------------------------ --------------------------------- ------------------------------ max_string_size string STANDARD SQL> -- 未指定raw数据类型长度 报错 SQL> CREATE TABLE test_raw(a raw); CREATE TABLE test_raw(a raw) * ERROR at line 1: ORA-00906: missing left parenthesis SQL> -- SQL场景2000字节大小 成功创建 SQL> CREATE TABLE test_raw(a raw(2000)); Table created. SQL> -- SQL场景超过2000字节 报错 SQL> CREATE TABLE test_raw2(a raw(2001)); CREATE TABLE test_raw2(a raw(2001)) * ERROR at line 1: ORA-00910: specified length too long for its datatype SQL> -- PL/SQL场景 定义变量32767字节大小 SQL> DECLARE 2 va raw(2001); 3 BEGIN 4 va := 'ff'; 5 END; 6 / PL/SQL procedure successfully completed. SQL> -- PL/SQL场景 定义变量超过32767字节大小 报错 SQL> DECLARE 2 va raw(32768); 3 BEGIN 4 va := 'ff'; 5 END; 6 / va raw(32768); * ERROR at line 2: ORA-06550: line 2, column 8: PLS-00215: String length constraints must be in range (1 .. 32767)
复制
raw类型接收十六进制数据(0~9 和 A~F 或 a~f),如直接输入的数据不符合规范将会报错,比如说’gg’
SQL> -- 接收十六进制数据 SQL> DECLARE 2 va raw(20); 3 BEGIN 4 va := '09afAF'; 5 END; 6 / PL/SQL procedure successfully completed. SQL> -- 直接输入非十六进制数据将会报错 SQL> DECLARE 2 va raw(20); 3 BEGIN 4 va := 'gg'; 5 END; 6 / DECLARE * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error ORA-06512: at line 4
复制
也可以考虑使用函数的方式传入传出数据,先以HEXTORAW、RAWTOHEX为例
HEXTORAW将十六进制字符串数据转换成数据,RAWTOHEX则相反,将raw类型数据转换成对应的十六进制字符串
SQL> set serveroutput on SQL> DECLARE 2 va raw(20) := HEXTORAW('ff'); 3 BEGIN 4 DBMS_OUTPUT.PUT_LINE(('va: '||va)); 5 DBMS_OUTPUT.PUT_LINE(('RAWTOHEX(va): '||RAWTOHEX(va))); 6 DBMS_OUTPUT.PUT_LINE('ff ~= HEXTORAW(ff) is '|| (case when 'ff' ~= va then 'true' else 'false' end)); 7 END; 8 / va: FF RAWTOHEX(va): FF ff ~= HEXTORAW(ff) is true PL/SQL procedure successfully completed.
复制
或者是使用UTL_RAW这个系统包,比如说UTL_RAW.CAST_TO_RAW、UTL_RAW.CAST_TO_VARCHAR2
UTL_RAW.CAST_TO_RAW,将输入的varchar2类型数据,比如说中文转换成对应的raw类型数据
UTL_RAW.CAST_TO_VARCHAR2 将raw类型数据转换成对应的varchar2类型数据
SQL> SELECT UTL_RAW.CAST_TO_RAW('ORACLE') FROM dual; UTL_RAW.CAST_TO_RAW('ORACLE') -------------------------------------------------------------------------------- 4F5241434C45 SQL> SELECT UTL_RAW.CAST_TO_VARCHAR2('4F5241434C45') FROM dual; UTL_RAW.CAST_TO_VARCHAR2('4F5241434C45') -------------------------------------------------------------------------------- ORACLE SQL> SELECT UTL_RAW.CAST_TO_RAW('羲和(Halo)数据库') FROM dual; UTL_RAW.CAST_TO_RAW('羲和(HALO)数据库') -------------------------------------------------------------------------------- E7BEB2E5928C2848616C6F29E695B0E68DAEE5BA93 SQL> SELECT UTL_RAW.CAST_TO_VARCHAR2('E7BEB2E5928C2848616C6F29E695B0E68DAEE5BA93') FROM dual; UTL_RAW.CAST_TO_VARCHAR2('E7BEB2E5928C2848616C6F29E695B0E68DAEE5BA93') -------------------------------------------------------------------------------- 羲和(Halo)数据库
复制
二、羲和(Halo)数据库表现
raw类型处理十六进制数据
HEXTORAW、RAWTOHEX函数
UTL_RAW系统包
如需完整体验上述的RAW类型,请使用羲和16或者升级至羲和16上(预告,即将发布!)进行体验。
三、声明
若文中存在错误或不当之处,敬请指出,以便我进行修正和完善。希望这篇文章能够帮助到各位。
文章转载请联系,谢谢合作。
最后修改时间:2024-06-28 11:53:38
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
在Oracle数据库中,RAW类型是一种可变长数据类型,一般用于存储二进制数据。
7月前

评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
451次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
430次阅读
2025-04-15 17:24:06
墨天轮个人数说知识点合集
JiekeXu
376次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
364次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
348次阅读
2025-04-01 11:08:44
说个大事,Halo开源
Salvatore-zz
343次阅读
2025-04-01 09:23:35
Oracle 19c RAC更换IP实战,运维必看!
szrsu
312次阅读
2025-04-08 23:57:08
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
301次阅读
2025-04-15 14:48:05
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
299次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
293次阅读
2025-03-19 14:41:51