怎么样

merge

?

SQL> create table tbl_empdetails (empdetails_id number, emp_salary number);

Table created.

SQL>

SQL> create table tbl_service (empdetails_id number, salary number, date_appointed date);

Table created.

SQL>

SQL> create or replace trigger trg_biu_ser

2 before insert or update on tbl_service

3 for each row

4 begin

5 merge into tbl_empdetails e

6 using (select :new.empdetails_id empdetails_id,

7 :new.salary salary,

8 :new.date_appointed date_appointed,

9 (select max(s1.date_appointed)

10 from tbl_service s1

11 where s1.empdetails_id = :new.empdetails_id

12 ) da

13 from dual

14 ) x

15 on (x.empdetails_id = e.empdetails_id)

16 when matched then update set e.emp_salary = :new.salary

17 where :new.date_appointed > x.da

18 when not matched then insert (empdetails_id , emp_salary)

19 values (:new.empdetails_id, :new.salary);

20 end;

21 /

Trigger created.

SQL>

测试:

SQL> -- initial value

SQL> insert into tbl_service values (1, 100, sysdate);

1 row created.

SQL> -- this is now the highest salary

SQL> insert into tbl_service values (1, 200, sysdate);

1 row created.

SQL> -- this won't be used because date is "yesterday", it isn't the most recent

SQL> insert into tbl_service values (1, 700, sysdate - 1);

1 row created.

SQL> -- this will be used ("tomorrow")

SQL> insert into tbl_service values (1, 10, sysdate + 1);

1 row created.

SQL> -- a new employee

SQL> insert into tbl_service values (2, 2000, sysdate);

1 row created.

SQL>

最终结果:

SQL> select * From tbL_service order by empdetails_id, date_appointed;

EMPDETAILS_ID SALARY DATE_APPOINTED

------------- ---------- -------------------

1 700 24.07.2019 15:00:21

1 100 25.07.2019 15:00:08

1 200 25.07.2019 15:00:15

1 10 26.07.2019 15:00:27

2 2000 25.07.2019 15:00:33

SQL> select * from tbl_empdetails order by empdetails_id;

EMPDETAILS_ID EMP_SALARY

------------- ----------

1 10

2 2000

SQL>

oracle 触发器 merge,如何从触发器中解决Oracle变异错误相关推荐

  1. Matlab中解决出现的错误使用 svmtrain (line 234) Y must be a vector or a character array.问题

    Matlab中解决出现的错误使用 svmtrain (line 234) Y must be a vector or a character array.问题 目录 解决问题 解决思路 解决方法 解决 ...

  2. oracle数据库path,利用Path环境变量解决oracle数据库和owb工具不兼容问题!

    利用Path环境变量解决oracle数据库和owb工具不兼容问题! 2009年5月4日 现象: 安装了oracle9i和owb10后往往会出现各自工具不能启动的现象,比如安装完oracle9i后再安装 ...

  3. oracle视图执行脚本,Sh脚本中查询Oracle v$视图时需要在$号前加转义符“\”

    DBA经常会部署一些sh脚本登陆Oracle数据库查询v$动态视图得到一些东西来实际管理自动化的目的,但在sh脚本中写ORACLE SQL语句时,如果语句查询v$视图,直接写v$XXXX是不能成功的, ...

  4. oracle跨表空间报错ORA00942,解决oracle报错ora-00704 ora-00604 ora-00942 启动不了数据库...

    使用conn / as sysdba登录oracle,使用start mount出现此错误 SQL> conn / as sysdba Connected to an idle instance ...

  5. oracle+字段科学计数,PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法...

    乱想-What&Why 今天去海淀书城看书,目的很明确,本来是想买的下册(2010年3月份买了上册,当时下册没出来),谁知这本书不单卖,要和上册一起卖,扫兴. 兴致减半,索性找了旁边的 ...

  6. oracle如果为0显示为1,解决Oracle的数值0.1只显示成.1问题

    Oracle对数值0.n转换成char类型的时候会自动忽略前面的0(原因好像是为了节省空间0.1保存到数据库为.1).例如: [sql] view plain copy 01.SQL> SELE ...

  7. oracle clog读取 php,Spring+Hibernate中处理Oracle的BLOG和CLOG字段

    对于BLOG和CLOB字段,大部分数据库提供了较为透明的支持,但Oracle比较特殊一些,在用Spring和Hibernate操作时,需要作一些特殊的处理,以CLOB为例,基本有下面几个步骤: 1.在 ...

  8. Oracle重复数据只删除一条,解决Oracle删除重复数据只留一条的方法详解

    查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group ...

  9. oracle sequence sql server,在SQLServer中实现ORACLE的Sequence

    如果大家在ORACLE里面用惯了Sequence,要在SqlServer里 实现 Sequence,就会发现没有现成的Sequence对象可以Create了.那应该怎么办呢? 当然这点小问题是难不倒我 ...

最新文章

  1. stdarg.h的库函数用法小结
  2. python crawler(1)
  3. 计算最大回撤_量化扫盲:什么是最大回撤?
  4. su 与 sudo 区别
  5. MongoDB ( 五 )高级_管理:用户的创建、删除与修改
  6. 分布式事务理论(学习笔记)
  7. MVC + AJAX请求失败的问题
  8. vmware的vmnet-概念的解说
  9. Canvas--文字渲染
  10. GUI Design Studio设计实例(附视频) :快速入门
  11. suse linux 分区表格式
  12. BZOJ3235 [Ahoi2013]好方的蛇 【单调栈 + dp】
  13. 未来人类笔记本 T5 67SH2 扩展内存条
  14. 新疆高一计算机学业水平测试,2017年新疆高中学业水平考试科目
  15. Java版本微信授权登录(测试版)
  16. 程序员的自我吐槽,来自专业人士的扎心吐槽!
  17. Android Q notification创建发送流程-framework篇
  18. 万变不离其宗之ZYNQ启动介绍
  19. SparkCore核心机制详解
  20. numpy计算移动平均值

热门文章

  1. python软件使用教程-python用什么软件编写
  2. python怎么读取列表-python如何读取列表中的参数
  3. python第三方库下载-python 第三方库下载
  4. 小学生python-小学生都开始学的Python编程到底是什么?
  5. python培训班价格-上海Python培训学费价格是多少
  6. python经典案例-20个Python练手经典案例,能全做对的人确实很少!
  7. python可以做什么工作好-学Python能找到什么工作?这4种工作最热门!
  8. INSERT IGNORE 与INSERT INTO的区别
  9. Android开发艺术探索》读书笔记 (8) 第8章 理解Window和WindowManager
  10. AngularJS API