oracle 触发器 merge,如何从触发器中解决Oracle变异错误
怎么样
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变异错误相关推荐
- 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.问题 目录 解决问题 解决思路 解决方法 解决 ...
- oracle数据库path,利用Path环境变量解决oracle数据库和owb工具不兼容问题!
利用Path环境变量解决oracle数据库和owb工具不兼容问题! 2009年5月4日 现象: 安装了oracle9i和owb10后往往会出现各自工具不能启动的现象,比如安装完oracle9i后再安装 ...
- oracle视图执行脚本,Sh脚本中查询Oracle v$视图时需要在$号前加转义符“\”
DBA经常会部署一些sh脚本登陆Oracle数据库查询v$动态视图得到一些东西来实际管理自动化的目的,但在sh脚本中写ORACLE SQL语句时,如果语句查询v$视图,直接写v$XXXX是不能成功的, ...
- oracle跨表空间报错ORA00942,解决oracle报错ora-00704 ora-00604 ora-00942 启动不了数据库...
使用conn / as sysdba登录oracle,使用start mount出现此错误 SQL> conn / as sysdba Connected to an idle instance ...
- oracle+字段科学计数,PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法...
乱想-What&Why 今天去海淀书城看书,目的很明确,本来是想买的下册(2010年3月份买了上册,当时下册没出来),谁知这本书不单卖,要和上册一起卖,扫兴. 兴致减半,索性找了旁边的 ...
- oracle如果为0显示为1,解决Oracle的数值0.1只显示成.1问题
Oracle对数值0.n转换成char类型的时候会自动忽略前面的0(原因好像是为了节省空间0.1保存到数据库为.1).例如: [sql] view plain copy 01.SQL> SELE ...
- oracle clog读取 php,Spring+Hibernate中处理Oracle的BLOG和CLOG字段
对于BLOG和CLOB字段,大部分数据库提供了较为透明的支持,但Oracle比较特殊一些,在用Spring和Hibernate操作时,需要作一些特殊的处理,以CLOB为例,基本有下面几个步骤: 1.在 ...
- Oracle重复数据只删除一条,解决Oracle删除重复数据只留一条的方法详解
查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group ...
- oracle sequence sql server,在SQLServer中实现ORACLE的Sequence
如果大家在ORACLE里面用惯了Sequence,要在SqlServer里 实现 Sequence,就会发现没有现成的Sequence对象可以Create了.那应该怎么办呢? 当然这点小问题是难不倒我 ...
最新文章
- stdarg.h的库函数用法小结
- python crawler(1)
- 计算最大回撤_量化扫盲:什么是最大回撤?
- su 与 sudo 区别
- MongoDB ( 五 )高级_管理:用户的创建、删除与修改
- 分布式事务理论(学习笔记)
- MVC + AJAX请求失败的问题
- vmware的vmnet-概念的解说
- Canvas--文字渲染
- GUI Design Studio设计实例(附视频) :快速入门
- suse linux 分区表格式
- BZOJ3235 [Ahoi2013]好方的蛇 【单调栈 + dp】
- 未来人类笔记本 T5 67SH2 扩展内存条
- 新疆高一计算机学业水平测试,2017年新疆高中学业水平考试科目
- Java版本微信授权登录(测试版)
- 程序员的自我吐槽,来自专业人士的扎心吐槽!
- Android Q notification创建发送流程-framework篇
- 万变不离其宗之ZYNQ启动介绍
- SparkCore核心机制详解
- numpy计算移动平均值
热门文章
- python软件使用教程-python用什么软件编写
- python怎么读取列表-python如何读取列表中的参数
- python第三方库下载-python 第三方库下载
- 小学生python-小学生都开始学的Python编程到底是什么?
- python培训班价格-上海Python培训学费价格是多少
- python经典案例-20个Python练手经典案例,能全做对的人确实很少!
- python可以做什么工作好-学Python能找到什么工作?这4种工作最热门!
- INSERT IGNORE 与INSERT INTO的区别
- Android开发艺术探索》读书笔记 (8) 第8章 理解Window和WindowManager
- AngularJS API