1. 程式人生 > >oracle 10g與oracle 11g的不同

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 [email protected]

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 子句 "這個好像是不對的,至於原理,不懂哦,有高手幫忙解答當然最好了,呵呵。

之前還發現不同的地方,只因當時專案緊急,沒來的及記下來,待以後再續了。