CH07_触发器练习

作者: 小小蒜头 | 来源:发表于2017-09-05 21:12 被阅读23次

--1 创建触发器,当test表执行DML语句时,将相关信息记录到日志表
-- 当前用户: user
SELECT USER FROM DUAL;

--创建测试表
CREATE TABLE test
(
t_id NUMBER(4), --编号
t_name VARCHAR2(20), --姓名
t_age NUMBER(2), --年龄
t_sex CHAR --性别
);

--创建记录测试表
CREATE TABLE test_log
(
l_user VARCHAR2(15), --用户
l_type VARCHAR2(15), --操作类型
l_date VARCHAR2(30) --操作日期
);
--测试数据
INSERT INTO test VALUES(101,'zhao',22,'M');
UPDATE test SET t_age = 30 WHERE t_id = 101;
DELETE test WHERE t_id = 101;

create or replace trigger tri_test
after delete or insert or update on test 
declare
 v_tag varchar2(10);
begin
  if inserting then v_tag := '插入';
  elsif updating then v_tag := '修改';
  elsif deleting then v_tag := '删除';
  end if;
  insert into test_log values((SELECT USER FROM DUAL),v_tag,sysdate);
end;

--2 创建触发器,它记录表的删除数据 ,将删除的数据存储到old_employee 表中
--创建表
CREATE TABLE employee
(
id VARCHAR2(4) NOT NULL, --编号
name VARCHAR2(15) NOT NULL, --姓名
age NUMBER(2) NOT NULL, --年龄
sex CHAR NOT NULL --性别
);
--插入数据
INSERT INTO employee VALUES('e101','zhao',23,'M');
INSERT INTO employee VALUES('e102','jian',21,'F');

create or replace trigger save_deletedata_oldemp 
before delete on employee 
for EACH ROW
begin
  insert into old_employee values(:old.id,:old.name,:old.age,:old.sex);
end;

--3.不允许删除20部门的人

delete EMP where empno=7369;

create or replace trigger tri_emp
after delete on emp 
for each row
begin
  if :old.deptno=20 
  then
  SYS.DBMS_OUTPUT.PUT_LINE('您不能删除20部门的员工');
  insert into EMP values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno);
  end if;
end;

--4.当员工姓名是丁院院时,执行触发器

create or replace trigger tri_nameis 
before delete or insert or update on emp 
for each row
begin
 if inserting then 
  if :new.ename='丁院院' then
  DBMS_OUTPUT.PUT_LINE('您插入数据了');
  end if;
elsif updating then 
 if :new.ename='SMITH' or :old.ename='SMITH'then
   DBMS_OUTPUT.PUT_LINE('您更新了数据');
 end if;
elsif deleting then 
if :old.ename='SMITH' then
   DBMS_OUTPUT.PUT_LINE('您删除了数据');
   end if;
  end if;
end;

--测试数据

update emp set sal=1000 where ename='丁院院';

相关文章

  • CH07_触发器练习

    --1 创建触发器,当test表执行DML语句时,将相关信息记录到日志表-- 当前用户: userSELECT U...

  • 0723思维觉醒(1)初阶情绪觉察

    练习1:花一个星期找到你人生中的触发器,记录下来。 练习2:对于你的触发器,你的解释是什么?把自己的信念全部描述出...

  • MySQL --触发器详解

    触发器的特性 触发器的应用场景 查看触发器 删除触发器 创建触发器 关于触发器的进一步介绍 触发器的特性 需要My...

  • 【听书笔记】《跨越不可能》如何在生活中获得更多的心流体验

    心理触发器 作者将触发器简单分为四类:心理触发器、环境触发器、创造性触发器和社会性触发器。 心理触发器指的就是,假...

  • 2018-11-19

    英语 txtA课后练习 数据结构上机课 编写树和二叉树的创建及遍历 数字电子技术基础 T型触发器,T'型触发器和J...

  • 牛客网SQL实战练习——41~50

    牛客网SQL实战练习——41~50 声明:练习牛客网SQL实战题目,整理笔记。 41.构造一个触发器audit_l...

  • Xamarin.Forms 第16局:触发器

    总目录 前言 本文介绍触发器:一、属性触发器二、数据触发器三、事件触发器四、多触发器五、EnterActions和...

  • 09-19:存储过程

    触发器笔记(续) 触发器是一类特殊的存储过程 DDL触发器(insert,delete,update) 后触发器 ...

  • 新、改、删 触发器

    创建触发器 删除触发器

  • 触发器

    3种类型 (1)属性触发器(2)数据触发器(3)事件触发器

网友评论

    本文标题:CH07_触发器练习

    本文链接:https://www.haomeiwen.com/subject/hwupjxtx.html