Oracle触发器-序列小笔记

1、首先创建两个测试表

create table STUDENT_INFO   ---创建student表
(
  id        NUMBER(19), --id
  stu_no    VARCHAR2(20), --学号
  stu_name  VARCHAR2(32), --姓名
  stu_age   NUMBER,  --年龄
  stu_major VARCHAR2(32) --专业
)
create table STU_LOG   ---创建stu_log表,用于记录对student表的操作日志
(
  log_id     NUMBER,  --日志id
  log_action VARCHAR2(100),  --操作名称
  log_date   DATE,  --操作时间
  log_message   VARCHAR2(32) --
)

2、创建序列

--创建序列,SEQ_STUDENT表示序列名
create sequence SEQ_STUDENT
minvalue 1 
maxvalue 9999 --最大值
start with 11 -- 开始序列
increment by 1 --每次增长
cache 10; --缓存

3、创建触发器

//创建一个插入时自增的触发器
create or replace trigger tr_stu_add
before insert on STUDENT_INFO
for each row
begin
select SEQ_STUDENT.nextval into :new.id from dual; --seq_user.nextval下一序列,:new.id表示列名
end;

测试触发器

//没有id值,插入时会自增
insert into STUDENT_INFO(stu_no,stu_name,stu_major) values('NO1','张三','中文系'); 		

4、两种类型触发器

   // 1.行级触发器
create or replace trigger modify_stucao
after insert or delete or update of stu_name,stu_major  --可以设置一个或多个字段
on STUDENT_INFO
for each row
  begin 
    if inserting then
      insert into stu_log values(1,'insert',sysdate,:new.stu_name);
    elsif deleting then
       insert into stu_log values(2,'delete',sysdate,:old.stu_name);
    elsif updating then
      insert into stu_log values(3,'update_old',sysdate,:old.stu_name);
      insert into stu_log values(4,'update_new',sysdate,:new.stu_name);
     end if;
end;
//测试语句
insert into STUDENT_INFO values(1,'NO2','李四',21,'数学系');  --插入一条数据
delete STUDENT_INFO where stu_name='张三';   --删除一条数据
update STUDENT_INFO set stu_age=25 where stu_name='李四';  --修改李四的年龄
update STUDENT_INFO set stu_major='王二' where stu_name='李四';  --修改李四的名称
	//2.语句(表级)触发器
	// NEW 或 OLD 引用不允许在表级触发器中
create or replace trigger modify_stu1
before insert or update or delete on STUDENT_INFO
begin
   if deleting then
     raise_application_error(-20001,'该表不允许删除数据');
   elsif updating then
     raise_application_error(-20002,'该表不允许修改数据');
    elsif inserting then
     raise_application_error(-20003,'该表不允许插入数据');
    end if;
end;
	//测试语句
insert into STUDENT_INFO values(1,'NO2','李四',21,'数学系');  --插入一条数据
delete STUDENT_INFO where stu_name='张三';   --删除一条数据
update STUDENT_INFO set stu_age=25 where stu_name='李四';  --修改李四的年龄
update STUDENT_INFO set stu_major='王二' where stu_name='李四';  --修改李四的名称
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值