oracle10g在merger into中使用using搜查出来的如果是空集,那么要比较的元素应该不存在using中,则不匹配,那么应该是插于,可是为什么实际上却没有插于呢?

解决方案 »

  1.   

    看看merge的语法,是不是哪里写的不对
      

  2.   

    参考下merge into 语法应该没有问题
      

  3.   

    语法上不存在什么问题。就是如果在using中子查询条件限定的很严,结果子查询结果为空集,那么应该是不匹配,按照merge 不匹配就插于新的数值的话,应该会插于新值的,可是为什么实际上没有插于新值呢。
      

  4.   

    merge不是有匹配和不匹配的处理吗
      

  5.   

    null时会插入啊OPER@tl> select * from test;       AAA        BBB
    ---------- ----------
             1          1OPER@tl> merge into test a using (select null aaa from dual) b
      2  on (a.aaa=b.aaa)
      3  when matched then update set a.bbb=999
      4  when not matched then insert values(0,0)
      5  /1 行已合并。OPER@tl> select * from test;       AAA        BBB
    ---------- ----------
             1          1
             0          0OPER@tl>
      

  6.   

    是using为空集,不是你要插于的数据为空集。
      

  7.   

    你应该检查别的地方,上面的例子已经证明null时会插入。
    不要再纠结于merge into.
      

  8.   

    using搜查出来的如果是空,当然什么都不做了
    是using出来的结果,跟要MERGE INTO的表比较,有就更新,没有就插入
      

  9.   

    using搜查出来的如果是空,也可以更merge into的表进行比较啊,应该都是不匹配,则要插于啊。