表 t1 中有这样的一列数据,出现了问题,本来应该是编码拼接的字符串,有些数据成了汉字
con
test1,test2,test3
test1,测试2
test1,测试3,测试4
测试1,测试2,测试4
表 t2 是一个参数表
id      name
test1   测试1
test2   测试2
test3   测试3
test4   测试4如果要把表t1中的列con更新成正常的数据,要怎么做呢?
正常的数据要是这样的:
con
test1,test2,test3
test1,test2
test1,test3,test4
test1,test2,test4

解决方案 »

  1.   


    --这样试试看看
    update t1
    set con=(select replace(t1.con,t2.id,t2.name) from t2)
      

  2.   


    --没有环境 未测试
    declare
    c_update sys_refcursor;
    begin
    for c_update in (select * from t2)
    loop
    update t1
    set con=replace(con,c_update.id,c_update.name);
    end loop;
    end;
      

  3.   

    update t1 a set a.con=replace(a.con,'测试','test');
      

  4.   

    aspen 3楼的应该可以,貌似我把问题考虑简单了.
      

  5.   

    这个很强大了,id跟name写反了
    不过因为数据比较特殊,
    还是会出现问题,
    比如
    t2表有可能有这样的数据
    id      name
    test    测试
    tstest  特殊测试
    test-sy 所有测试如果t1有些这样的数据
    测试,特殊测试,所有测试
    转成编码就会成为
    test,特殊test,测试-sy
    这样有什么方法限定不?防止这样的情况发生
      

  6.   

    把cursor按长度逆向排序,先更新长度大的
    declare
    c_update sys_refcursor;
    begin
    for c_update in (select * from t2 order by name desc)
    loop
    update t1
    set con=replace(con,c_update.id,c_update.name);
    end loop;
    end;