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

Y阿布Y

Y阿布Y

2016-02-19 18:46

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

  在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

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

 一个典型的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';

(本文来源于图老师网站,更多请访问http://m.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语句。

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
使用Oracle 10gMERGE语句更新数据行

使用Oracle10gMERGE语句更新数据行

电脑网络
使用Oracle10gMERGE语句更新数据行

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Oracle 数据 使用游标

编程语言 网络编程
Oracle 数据 使用游标

Oracle数据库中跟踪sql语句介绍

编程语言 网络编程
Oracle数据库中跟踪sql语句介绍

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

透视MySQL数据库之更新语句

MySQL mysql数据库
透视MySQL数据库之更新语句

ORACLE SQL 语句分类

编程语言 网络编程
ORACLE SQL 语句分类

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

ORACLE回滚段管理(下)

ORACLE回滚段管理(下)

QQ情侣分组设计_我就一颗心,伤完了,把壳还我

QQ情侣分组设计_我就一颗心,伤完了,把壳还我
下拉加载更多内容 ↓