-- 1.利用触发器实现对用户表修改的字段其原始内容和修改时间自动记录到record表。
-- <1.1>首先创建要记录内容的表 record,共有两个个字段:
Create table record(
content varchar2 (100), --修改内容
rtime timestamp --修改时间
)
-- <1.2>对 emp 表创建一个触发器
Create or replace trigger update_emp_trigger
after update on emp
for each row
begin
Insert into record values('执行update前数据是empno='||:old.empno||',ename='||:old.ename||'job='||:old.job||',deptno='||:old.deptno,sysdate);
end update_emp_trigger;
-- <1.3>验证触发器
update emp set ename='wancgfang' where empno='7499';
commit;
-- <1.4>查询 record 表
select * from record;
--2.创建触发器t_up_sc,当修改emp表中的sal列和comm列时,如果修改后的值小于原始值,则不予修改。验证触发器。
create or replace trigger t_up_sc
before update on emp
for each row
begin
if :old.sal > :new.sal or :old.comm > :new.comm then
raise_application_error(-20001,'修改后的值小于原始值,则不予修改');
end if;
end;
-- <2.1>验证触发器
select * from emp where empno='7499';
update emp set sal=2000, comm=100 where empno='7499';
commit;
-- 3.创建触发器t_dept,以保证每天晚上10点到早上6点不允许对dept表进行操作。验证触发器。
create or replace trigger t_dept
before insert or delete or update on dept
begin
if(to_number(to_char(sysdate,'HH24')) >= 22 or to_number(to_char(sysdate,'HH24')) <= 6) then
raise_application_error(-20002,'每天晚上10点到早上6点不允许对dept表进行操作');
end if;
end;
-- <3.1>验证触发器
select * from dept;
delete from dept where deptno=10;
--4. 创建触发器t_up_de_dept,当从dept表中删除部门时,
-- 从emp表中删除相应部门的员工信息;当修改dept表中部门编号时,
-- 同时修改emp表中的部门编号。验证触发器。
create or replace trigger t_up_de_dept
after delete or update on dept
for each row
begin
if deleting then
delete from emp where deptno = :old.deptno;
end if;
if updating then
update emp set deptno=:new.deptno where empno in (select e.empno from emp e where e.deptno = :old.deptno);
end if;
end;
--18102108李玉田
-- <4.1>验证触发器
select * from emp;
select * from dept;
update dept set deptno=31 where dname ='SALES';
实验6 触发器个人实验报告
最新推荐文章于 2024-05-14 01:03:09 发布