当前位置: 首页 > 图文教程 > 数据库 > Oracle > 使用Oracle 10gMERGE语句更新数据行

Oracle
Excel VBA连接并操作Oracle
Oracle 外连接实现代码
oracle 存储过程和函数例子
Oracle 数据库操作类
ORACLE 分区表的设计
Oracle 用户权限管理方法
Oracle In和exists not in和not exists的比较分析
利用windows任务计划实现oracle的定期备份
ORACLE11g随RHEL5系统自动启动与关闭的设置方法
在oracle 数据库查询的select 查询字段中关联其他表的方法
plsql和tsql常用函数比对
plsql与tsql的语法不同
ASP.NET调用oracle存储过程实现快速分页
执行drop表操作后数据库无法起动
分析Oracle有时会用索引来查找数据的原因
数据从MySQL迁移到 Oracle的注意事项
快速理解Oracle归档模式的命令及参数
在Oracle里加快SQL执行的三种方法
几条常见的数据库分页 SQL 语句
Oracle9I OCP认证过程

使用Oracle 10gMERGE语句更新数据行


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-31   浏览: 108 ::
收藏到网摘: n/a

  在Oracle 9i R2版中引入的MERGE语句通常被称作“更新插入”(upsert),因为使用MERGE可以在同一个步骤中更新(update)并插入(insert)数据行,对于抽取、转换和载入类型的应用软件可以节省大量宝贵的时间,比如向数据仓库中加载数据,数据仓库中没有的数据行可以插入到数据仓库中,而已经存在的数据行也同时被更新。

  在MERGE语句引入的时候,需要同时使用一条UPDATE和一条INSERT语句,顺序也是固定的(先使用UPDATE语句,然后是INSERT语句)。如果您只需要使用其中的某一条一句,您只需要使用现有的INSERT或者UPDATE语句,而不必使用MERGE语句,而删除数据可以使用DELETE语句。

  在Oracle 10g R1版中,MERGE语句发生了变化,UPDATE或INSERT语句不再是必须的,而是可选项,您可以两者都用也可以都不用,而且,UPDATE语句也具备了DELETE的功能,您可以在同一个步骤中对现有的有效记录进行升级并清理废弃的记录。

  列表A创建了一个表格列出现有项目:项目号码、标题、开始日期、进度完成比例以及员工对项目的响应,还创建了一个事务表格使用MERGE语句进行升级批处理。

  DROP TABLE open_projects;
  DROP TABLE project_updates;
  CREATE TABLE open_projects
  (pno NUMBER(6) PRIMARY KEY,
  title VARCHAR2(40),
  startdate DATE,
  pctdone NUMBER(3),
  empno NUMBER(6)
  );
  INSERT INTO open_projects VALUES
  (10, 'Inventory servers', '08-JAN-07',0, 206);
  INSERT INTO open_projects VALUES
  (20, 'Upgrade Oracle on SRV01','15-JAN-07', 0, 206);
  INSERT INTO open_projects VALUES
  (30, 'Conduct skills assessment','22-JAN-07', 0, 210);
  CREATE TABLE project_updates
  (action CHAR(1),
  pno NUMBER(6),
  pctdone NUMBER(3),
  empno NUMBER(6)
  );
  INSERT INTO project_updates VALUES
  ('C', 10, 50, 214);
  INSERT INTO project_updates VALUES
  ('D', 20, NULL, NULL);
  COMMIT;

  列表A

 一个典型的MERGE语句从识别表格开始执行升级,而且对现有的记录进行筛选测试:

  MERGE INTO open_projects op
  USING project_updatespu
  ON (op.pno = pu.pno)
  ...

  表格open_projects会接受更新的数据,而project_updates表格则不会改变,如果项目号码(pno)在两个表格中都一样,那么数据行则被认为是相同的。

  MERGE语句剩下的部分是更新语句,以及DELETE WHERE语法。

  ...
  WHEN MATCHED THEN
  UPDATE SET pctdone = pu.pctdone,
  empno = pu.empno
  DELETE
  WHERE pu.action = 'D';

  列表B展示了MERGE语句运行前后的表格情况。

  SQL> @mergedel_b
  PNO TITLE STA