程序员JavaEE 学习专题Java学习笔记

CH07_触发器练习

2017-09-05  本文已影响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='丁院院';
上一篇下一篇

猜你喜欢

热点阅读