熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

oraclemergeinto用法及例子

2013-11-13 16:24:51  來源: Oracle 

  ORACLE I中加入了MERGE

  語法

  MERGE [hint] INTO [schema ] table [t_alias]

  USING [schema ] { table | view | subquery } [t_alias]

  ON ( condition )

  WHEN MATCHED THEN merge_update_clause

  WHEN NOT MATCHED THEN merge_insert_clause;

  創建測試數據表

  create table tj_test(id numbername varchar()age number);

  向表中插入數據

  insert into tj_test values (jan);

  insert into tj_test values (kk);

  insert into tj_test values (joe);

  select * from tj_test;

  查詢結果如下

   jan

   kk

   joe

  創建另一新表

  create table tj_test as select * from tj_test where =

  插入一條數據

  insert into tj_test values (jlk);

  select * from tj_test

  查詢結果如下

   jkl 注意這裡的的NAME字段中的值是jkl

  使用MERGE實現有則更新無則插入sql語句如下

  merge into tj_test tt

  using tj_test tt

  on (ttid=ttid)

  when matched then

  update set

  ttname=ttname

  ttage=ttage

  when not matched then

  insert values(

  ttid

  ttname

  ttage)

  查詢tj_test表(對比原來表中的數據更新了ID= ROW中字段NAME同時多出兩條新數據)

  select * from tj_test

  改變行數據如下

   jan 這裡的原有jkl值被更新

   joe 原來表中沒有的插入

   kk 原來表中沒有的插入

  如果存在就更新不存在就插入

  i已經支持了是Merge但是只支持select子查詢

  如果是單條數據記錄可以寫作select …… from dual的子查詢

  語法為

  MERGE INTO table

  USING data_source

  ON (condition)

  WHEN MATCHED THEN update_clause

  WHEN NOT MATCHED THEN insert_clause;

  如:

  MERGE INTO course c

  USING (SELECT course_name period

  course_hours

  FROM course_updates) cu

  ON (urse_name = urse_name

  AND cperiod = cuperiod)

  WHEN MATCHED THEN

  UPDATE

  SET urse_hours = urse_hours

  WHEN NOT MATCHED THEN

  INSERT (urse_name cperiod

  urse_hours)

  VALUES (urse_name cuperiod

  urse_hours);


From:http://tw.wingwit.com/Article/program/Oracle/201311/18285.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.