Oracle merge从9i到10g的增强


MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。

下面看个具体例子:

  1. hr@ORCL> select * from p;  
  2.   
  3.         ID NAME  
  4. ---------- ----------   
  5.          1 d  
  6.          3 e  
  7.          8 f  
  8.   
  9. hr@ORCL> select * from t;  
  10.   
  11.         ID NAME  
  12. ---------- ----------   
  13.          1 a  
  14.          2 b  
  15.          3 c  
  16.   
  17. hr@ORCL> merge into t using p  
  18.   2         on (t.id=p.id)  
  19.   3       when matched then  
  20.   4     update set  
  21.   5       t.name=p.name  
  22.   6       when not matched then  
  23.   7     insert values  
  24.   8       (p.id,p.name)  
  25.   9  ;  
  26.   
  27. rows merged.  
  28.   
  29. hr@ORCL> select * from t;  
  30.   
  31.         ID NAME  
  32. ---------- ----------   
  33.          1 d  
  34.          2 b  
  35.          3 e  
  36.          8 f  
  37.   
  38. hr@ORCL> commit;  
  39.   
  40. Commit complete.  

下面稍微修改一下例子:

  1. hr@ORCL> insert into p values(1,'h');  
  2.   
  3. 1 row created.  
  4.   
  5. hr@ORCL> commit;  
  6.   
  7. Commit complete.  
  8.   
  9. hr@ORCL> merge into t using p  
  10.   2         on (t.id=p.id)  
  11.   3       when matched then  
  12.   4     update set  
  13.   5       t.name=p.name  
  14.   6       when not matched then  
  15.   7     insert values  
  16.   8       (p.id,p.name)  
  17.   9  ;  
  18.  merge into t using p  
  19.                     *  
  20. ERROR at line 1:  
  21. ORA-30926: unable to get a stable set of rows in the source tables  
  • 1
  • 2
  • ���一页

相关内容