oracle 10g与oracle 11g的不同

一.merge into 

在网上查资料得到

该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。

1.insert 和update是可选的 

2.UPDATE 和INSERT 后面可以跟WHERE 子句 

3.在ON条件中可以使用常量来insert 所有的行到目标表中,不需要连接到源表和目标表 

4.UPDATE 子句后面可以跟delete 来去除一些不需要的行。

我的sql是这样的:

merge into E203@LINKLJ t1
using (select JH,
              SGDW,
              SGDH,
              LJDW,
              LJDH
         from SJ_LJ.E203
        where swid = '00005ZphA57bT'
          and jh in (select jh
                       from LC_DJSHXXB
                      where (csdwshzt <> '-1' and zgdwshzt <> '-1' and
                            ysdwshzt <> '-1')
                        and swid = '00005ZphA57bT')) t2
on (t1.JH = t2.JH)
when matched then
  update
     set t1.SGDW    = t2.SGDW,
         t1.SGDH    = t2.SGDH,
         t1.LJDW    = t2.LJDW,
         t1.LJDH    = t2.LJDH
   where t1.JH = t2.JH
when not matched then
  insert
    (JH,
     SGDW,
     SGDH,
     LJDW,
     LJDH) 
  values
    (t2.JH,
     t2.SGDW,
     t2.SGDH,
     t2.LJDW,
     t2.LJDH)

按照上面的资料按理来说,我这个sql语句在10g和11g都是可以执行的,但是实际上是11g可运行,10g报:ora-00904:"A3"."JH":标识符无效;ora-02063......

然后我将update中的where条件去掉,就OK了。

"UPDATE 和INSERT 后面可以跟WHERE 子句 "这个好像是不对的,至于原理,不懂哦,有高手帮忙解答当然最好了,呵呵。

之前还发现不同的地方,只因当时项目紧急,没来的及记下来,待以后再续了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值