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

2016-02-19 18:46 6 1 收藏

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐使用Oracle 10gMERGE语句更新数据行,赶紧看过来吧!

【 tulaoshi.com - 编程语言 】

  在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)在两个表格中都一样,那么数据行则被认为是相同的。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

  SQL @mergedel_b
  PNO TITLE STARTDATE PCTDONE EMPNO
  ---------- ---------------------------------------- --------- ---------- ----------
  10 Inventory servers 08-JAN-07 0 206
  20 Upgrade Oracle on SRV01 15-JAN-07 0 206
  30 Conduct skills assessment 22-JAN-07 0 210
  A PNO PCTDONE EMPNO
  - ---------- ---------- ----------
  C 10 50 214
  D 20
  2 rows merged.
  PNO TITLE STARTDATE PCTDONE EMPNO
  ---------- ---------------------------------------- --------- ---------- ----------
  10 Inventory servers 08-JAN-07 50 214
  30 Conduct skills assessment 22-JAN-07 0 210
  A PNO PCTDONE EMPNO
  - ---------- ---------- ----------
  C 10 50 214
  D 20
  SQL spool off

  列表B

  第一个事务对第10号项目进行了改变(操作‘c’),项目完成比例从0变成了50,项目员工人数变成了214人;第二个事务产出了第20号项目,“随后”的列表展示了删除后的状态,而project_updates表格没有发生改变。这个例子展示了这些语句并不是必须的,而且在MERGE语句中也并不需要使用INSERT语句。

来源:http://www.tulaoshi.com/n/20160219/1618906.html

延伸阅读
标签: ASP
  Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言。许多ASP开发人员一直在考虑,能否在开发互联网应用、电子商务网站、互联网管理系统时结合使用ASP和Oracle数据库?这个问题的答案是肯定的,我们还可以使用VB访问Oracle数据库。在本篇文章中,我们将主要讨论...
标签: 办公软件
将网页表格数据导入Excel XP最简单的方法就是复制了,选定网页表格内容,执行复制操作后到Excel XP中一“粘贴”就可以了,表格格式仍然保持不变。 但网页上有些数据是时常更新的,您是否希望Excel XP中的数据也能随网站一起更新呢?没问题,看我的。 当您应用上面复制...
SQL select sid,event,p1,p1text from v$session_wait; 如果发现存在大量db file scattered read及db file sequential read等待. 显然全表扫描等操作成为系统最严重的性能影响因素. 使用下面的SQL语句可以得到指定SID的sql内容 SELECT sql_text FROM v$sqltext a WHERE a.hash_value = (SELECT sql_hash_value F...
标签: SQLServer
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句 一、 简单查询 简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 SELECT nickname,email FROM testtab...
标签: SQLServer
  在项目开发的过程当中,项目组开发成员的编程风格差异和数据库操作语句SQL的灵活性给项目组带来了越来越多的操作和维护难度。 比如:从user表中取出所有数据,有的人会写成“select * from user”,有的人会写成“select all from user”,虽然在操作中不会有任何的错误,但在其他人读程序的过程时就会产生不好的感觉。 如果这种程序差...

经验教程

973

收藏

96
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部