Oracle从入门到总裁:https://blog.youkuaiyun.com/weixin_67859959/article/details/135209645
触发器实例
(1)在 emp 数据表上建立触发器,当员工改变工作岗位或者所在部门发生变化时,将变化信息记录在工作变化日志中。
(2)在 emp 数据表上建立触发器,当员工工资改变的时候,核对是否超出全体员工现有工资的范围。
(3)在 emp 数据表上建立触发器,统计部门人数,当插入新员工的时候,统计是否部门员工人数超过上限。
分析(1):
第一个要求是在修改数据的时候,如果是改变工作岗位或者所在部门发生变化时,将变化信息记录在工作变化日志中,
因此首先需要创建一个工作岗位变化表。如下所示。
CREATE TABLE job_change(
Empno NUMBER(4), /*员工代码*/
Hiredate DATE, /* 原先岗位或者部门聘用的日期 */
Change_date DATE, /*变化岗位或者部门的日期*/
Job VARCHAR2(9), /* 原先的岗位 */
Deptno NUMBER(2)) /* 原先的部门 */
这个触发器根据更新时员工的代码,首先从job_change 数据表中判断以前是否改变过工作岗位或者部门,
如果改变过,取他上次改变工作岗位或者部门的日期,如果没有改变过,就从emp 表中取雇佣日期,
最后将变化信息插入job_change 数据表中:触发器创建的代码如下图所示。

下面就修改其中一位员工的信息,验证一下触发器是否可以正常工作,如下所示。

如上图所示,接连修改员工 7369 的工作岗位,可以看出职工变化信息表中记录了变化信息。
分析(2):
这个范例要求当员工工资改变的时候,核对是否超出全体员工工资允许的范围,如果超过范围,则提示错误,不能修改。触发器代码如下图所示。

建立完触发器后,可以更新数据以验证触发器是否正确。如下图所示

当输入的数值在允许范围内时,可以更新,如果超出范围,则提示错误。
分析(3):
在 emp 数据表上建立触发器,这个触发器首先需要统计部门人数,然后判断人数是否超出该部门人数上限。
如果超过,则提示错误。触发器代码如下图所示。

当部门人员超过 20 人时,插入新员工,会出现下图所示的提示错误。


被折叠的 条评论
为什么被折叠?



