如果在tb表的col列中能找到city表中的ctname,就把col换成ctname??

解决方案 »

  1.   

    不是,比方col值是'杭州市西湖区杭州市江干区',city里有个'杭州市',那就把col更新成'西湖区江干区'
      

  2.   

    是这样吗?你加了hint管用么,我用你的视图更新方式总是报ora01779,关联列不能更新,这里新建了个列col2来更新,完了可以再将空的处理
    merge into 表tb a
    using 表city b on (instr(a.col,b.ctname)>1)
    when matched then 
      update set a.col2=substr(a.col,instr(a.col,b.ctname)+length(b.ctname))
      

  3.   

    视图更新报ora01779应该是版本问题吧,我用自己可以执行的代码在别人的库上用这种方式更新时碰到过,在表上建个主键就行了。那个hint的忽略唯一性的。merge的时候update的列不能和on的列是同一个,再建1个列可以避免,不过最好不改表结构吧
      

  4.   

    改成merge试一下
    参考:
    http://www.cnblogs.com/highriver/archive/2011/08/02/2125043.html
      

  5.   

    为什么要加hint,你想绕过什么
      

  6.   

    merge的时候update的列在on条件里的话,会报错“ora-38104 无法更新on子句中引用的列:……”,不知道怎么避免。因为要更新的表很多,不可能每张表都建个列去中转的
      

  7.   


    SELECT a.col a1,REPLACE(a.col,b.ctname) b1 
           FROM tb a,city b 
          WHERE INSTR(a.col,b.ctname)>=1你这个句子 a和b 用条件关联吧, 你这样写 会不会弄成笛卡尔积, 要是笛卡尔积肯定慢
      

  8.   

    一定要这么执行就创建函数索引在INSTR(a.col,b.ctname)
      

  9.   

    不要加hint,加hint后,10g用不到索引、
      

  10.   

    关联条件是a.col like '%'||b.ctname||'%',本来就用不上索引吧?