utl_raw.cast_to_raw 如何处理大于4000字符

 时间:2026-02-15 07:37:12

1、准备测试环境

测试环境数据库是Oracle 11g,创建下面包含一个BLOG类型的表:

CREATE TABLE blob_test(id NUMBER,   data BLOB)

utl_raw.cast_to_raw 如何处理大于4000字符

2、Oracle数据类型长度限制

下面列出了Oracle常见数据类型及其在PL/SQL和SQL中的长度了限制,可以看出,在SQL中,varchar2的最大字节长度为4000,raw类型最大字节长度为2000。

utl_raw.cast_to_raw 如何处理大于4000字符

3、重现utl_raw.cast_to_raw最大返回长度为4000限制问题

使用rpad函数构造一个长度为2001的字符串,如果utl_raw.cast_to_raw执行成功能地话,就会返回一个长度为4002的varchar2字符串,因为4002超出了varchar2的长度限制,所以就出现在错误。

insert into blob_test values(1,utl_raw.cast_to_raw(rpad('v',2001,'v')))

utl_raw.cast_to_raw 如何处理大于4000字符

4、使用匿名PL/SQL块突破4000的限制

从步骤2中的Oracle数据类型长度限制中可以知道,在PL/SQL中,varchar2的取大长度为32767,以这个长度构建一个varchar2字符串,用utl_raw.cast_to_raw转为raw类型。

declare    r_data  blob;begin    r_data := utl_raw.cast_to_raw(rpad('v',32767,'v'));    insert into blob_test values(1,r_data);end;       

utl_raw.cast_to_raw 如何处理大于4000字符

5、确认上面步骤结果

执行下面SQL,可以看出插入的数据长度已经突破了4000的长度限制。

utl_raw.cast_to_raw 如何处理大于4000字符

6、使用blob类型突破32767长度限制

在PL/SQL中,raw类型的长度限制是32767,如果要突破32767的长度限制,需要使用blob类型。下面代码将两个长度为32767的raw类型数据追加到blob变量中,然后再更新到表中。

declare 

    b_data                blob; 

    r_temp                raw(32767);

    v_long_line     varchar2(32767);

begin 

    v_long_line :=    RPAD('v', 32767,'v');

    r_temp := UTL_RAW.CAST_TO_RAW(v_long_line);

    insert into blob_test values(2,empty_blob()) returning data into b_data;

    dbms_lob.open(b_data,dbms_lob.lob_readwrite);

    dbms_lob.writeappend(b_data,UTL_RAW.LENGTH(r_temp), r_temp);

    dbms_lob.writeappend(b_data,UTL_RAW.LENGTH(r_temp) ,r_temp);    

    dbms_lob.close(LOB_LOC=>b_data);

end;

utl_raw.cast_to_raw 如何处理大于4000字符

utl_raw.cast_to_raw 如何处理大于4000字符

  • 如何映射网络驱动器,也就是把远程硬盘本地化
  • IBM x3650后边的system management端口的作用
  • 如何使用WIN10系统自带的Telnet客户端服务
  • Serv_U到期卸载后重装,还是不能用怎么办?
  • OA系统管理员如何给新建的流程节点设置显示模板
  • 热门搜索
    颈怎么组词 排骨怎么炖 怎么迁户口 五线谱怎么看 中华鲎怎么读 机票怎么取 个人所得税app怎么退税 豆浆机怎么打豆浆 干鱿鱼怎么做好吃 羊水破了怎么办