Oracle merge从9i到10g的增强
Oracle merge从9i到10g的增强
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。
下面看个具体例子:
- hr@ORCL> select * from p;
- ID NAME
- ---------- ----------
- 1 d
- 3 e
- 8 f
- hr@ORCL> select * from t;
- ID NAME
- ---------- ----------
- 1 a
- 2 b
- 3 c
- hr@ORCL> merge into t using p
- 2 on (t.id=p.id)
- 3 when matched then
- 4 update set
- 5 t.name=p.name
- 6 when not matched then
- 7 insert values
- 8 (p.id,p.name)
- 9 ;
- 3 rows merged.
- hr@ORCL> select * from t;
- ID NAME
- ---------- ----------
- 1 d
- 2 b
- 3 e
- 8 f
- hr@ORCL> commit;
- Commit complete.
下面稍微修改一下例子:
- hr@ORCL> insert into p values(1,'h');
- 1 row created.
- hr@ORCL> commit;
- Commit complete.
- hr@ORCL> merge into t using p
- 2 on (t.id=p.id)
- 3 when matched then
- 4 update set
- 5 t.name=p.name
- 6 when not matched then
- 7 insert values
- 8 (p.id,p.name)
- 9 ;
- merge into t using p
- *
- ERROR at line 1:
- ORA-30926: unable to get a stable set of rows in the source tables
|
评论暂时关闭