oracle数据库,有张表A,其中有个字段xx,类型为blob字段,,我想更新这个字段,
update a set xx=xx|| char_to_raw('aa') ,报错,其中,char_to_raw是我写的将字符转16进制函数,错误应该是出在接的问题,请教怎么将原来的这个字段接上转换后的数据更新成新的字段?

解决方案 »

  1.   

    --这样试试
    update a set xx=xx|| utl_raw.cast_to_raw('aa')
      

  2.   

    Create Table t111(a Blob);
    Insert Into t111 Values(Hextoraw('aa'));Declare
    c Blob;
    Begin
      select a Into c From t111 For Update;
      dbms_lob.append(c,Hextoraw('bb'));
    Update t111 
    set a = c;
    End;
      

  3.   


    --估计要改下   ||这个应该是对字符型有效的
    update a set xx=utl_raw.cast_to_raw(utl_raw.cast_to_varchar2(xx)||'aa')
      

  4.   

    [code=SQ]update a set xx=xx|| utl_raw.cast_to_raw('aa')[/code]
      

  5.   

    我试了下,不行啊,blob也能这样接?
      

  6.   


    insert into t_blob values ('tom',utl_raw.cast_to_raw('tom is a good boy!'));select stuname,utl_raw.cast_to_varchar2(dblob) from t_blob;STUNAME
    --------------------
    UTL_RAW.CAST_TO_VARCHAR2(DBLOB)
    ----------------------------------------------------------------------------------------------------
    tom
    tom is a good boy!Declare
    b_c Blob;
    Begin
      select dblob Into b_c From t_blob For Update;
      dbms_lob.append(b_c,utl_raw.cast_to_raw('and you?'));
    Update t_blob
    set dblob = b_c;
    End;--commit;select utl_raw.cast_to_varchar2(dblob) from t_blob;UTL_RAW.CAST_TO_VARCHAR2(DBLOB)
    ---------------------------------------------------------------------
    tom is a good boy!and you?
      

  7.   

    update table set a=utl_raw.cast_to_raw(utl_raw.cast_to_varchar2(a)||'tom is a good boy!');
      

  8.   

    还是报错
    ,我在存储过程中跟了下xx这个blob字段的值是open=F, temp=F, length=2735, chunksize=8132, data=5957303130313B59573031303130313B595730313031303130383B595730313031303130385F3334303B595730313031303130385F3331363B5957303130313031303830313B59573031303130313038303130313B59573031303130313038303130315F3334323B59573031303130313038303130315F3334333B59573031303130313038303130323B59573031303130313038303130325F3334343B59573031303130313038303130325F3334353B59573031303130313038303130333B59573031303130313038303130335F3334363B59573031303130313038303130335F3334373B59573031303130313038303130335F3330313B59573031303130,而我要在这个字段的基础上接上‘;99999’,所以用如下语句:
     update A set xx= utl_raw.cast_to_raw(tempywrawdata||‘;99999’) ;其中tempywrawdata变量是varchar2(32767)类型,是通过tempywrawdata:=utl_raw.cast_to_varchar2(XX)转换后的,执行后就报图示错误,长度肯定是没有超过限制的吧。原来的长度是2735,加上转换‘;99999’应该也不会超长吧,怎么会报超长的错呢?请指教。
      

  9.   

    update a set xx=concat(xx, char_to_raw('aa'))
    这样试试,,也是连接作用