Oracle:如何使用UPSERT(更新或插入到表中?)

Oracle:如何使用UPSERT(更新或插入到表中?)

UPSERT操作更新或插入表中的一行,这取决于表是否已经有与数据匹配的行:

if table t has a row exists that has key X:
    update t set mystuff... where mykey=Xelse
    insert into t mystuff...

由于Oracle没有特定的UPSERT语句,那么最好的方法是什么?


慕田峪7331174
浏览 4077回答 3
3回答

芜湖不芜

合并的另一种选择(“旧式方式”):begin    insert into t (mykey, mystuff)        values ('X', 123);exception   when dup_val_on_index then       update t        set    mystuff = 123        where  mykey = 'X';end;

红糖糍粑

这个合并语句将数据合并到两个表之间。使用DUAL允许我们使用这个命令。请注意,这不受并发访问的保护。create or replaceprocedure ups(xa number)asbegin    merge into mergetest m using dual on (a = xa)         when not matched then insert (a,b) values (xa,1)             when matched then update set b = b+1;end ups;/drop table mergetest;create table mergetest(a number, b number);call ups(10);call ups(10);call ups(20);select * from mergetest;A                      B---------------------- ----------------------10                     220                     1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL
Oracle