广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

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

    来源:网络收集  点击:  时间:2024-12-17
    【导读】:
    Utl_Raw.Cast_To_Raw函数的作用是将每个字节的值用十六进制字符表示出来,如:A会转为41,转换后数据长度会是原来字节长度的2倍。在SQL中使用该函数,最后返回的数据类型是varchar2,由于varchar2数据类型长度的限制,在SQL中使用utl_raw.cast_to_raw函数时,会有4000个字符长度的限制,如果超传入的参数长度超出了2000个字符,就会出现错误:ORA-06502: PL/SQL: numeric or value error: raw variable length too long。本文说明utl_raw.cast_to_raw 如何处理大于4000字符。工具/原料moreoracle 11gSQL Navigator等SQL工具方法/步骤1/6分步阅读

    准备测试环境

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

    CREATE TABLE blob_test(id NUMBER, data BLOB)

    2/6

    Oracle数据类型长度限制

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

    3/6

    重现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)))

    4/6

    使用匿名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;

    5/6

    确认上面步骤结果

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

    6/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;

    注意事项

    本经验还会不断补充和完善,直到有一天我们发现这篇经验已无存在价值。

    如果有朋友喜欢这篇经验,请为我点赞,后续还会为大家分享更多经验,有兴趣的亲们可以点击关注我。

    ORACLECAST_TO_RAWUTL_RAW4000长度限制
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_1227628.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号06-14 02:42:20  耗时:0.728