我是靠谱客的博主 迷路戒指,最近开发中收集的这篇文章主要介绍SQL触发器一、触发器的语法如下二、案例一,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、触发器的语法如下

CREATE OR REPLACE TRIGGER trigger_name
<before | after | instead of>
<insert | update | delete>
ON table_name
[FOR EACH ROW]
WHEN (condition)
DECLARE
BEGIN
–触发器代码
END;
Trigger_name是触发器的名称。<before | after | instead of>可以选择before或者after或instead of。
Before表示在DML语句实施前执行触发器,而after表示在在dml语句实施之后执行触发器,instead of触发器用在对视图的更新上。
<insert | update | delete>可以选择一个或多个DML语句,如果选择多个,则用or分开,如:insert or update。
Table_name是触发器关联的表名。
[FOR EACH ROW]为可选项,如果注明了FOR EACH ROW,则说明了该触发器是一个行级的触发器,DML语句处理每条记录都会执行触发器;
否则是一个语句级的触发器,每个DML语句触发一次。
WHEN后跟的condition是触发器的响应条件,只对行级触发器有效,当操作的记录满足condition时,触发器才被执行,否则不执行。
Condition中可以通过new对象和old对象(注意区别于前面的:new和:old,在代码中引用需要加上冒号)来引用操作的记录。

二、案例一

现有如下两个表:
EMPLOYEES(EID,NAME,DEPTNO)
DEPARTMENTS(DEPTNO,DEPTNAME,TOTALNUMBER)
EMPLOYEES描述了职工编号、姓名和所在部门编号;DEPARTMENTS描述了部门编号、名称和职工总人数。
请编写触发器:每当在EMPLOYEES表中插入一行数据时,相应部门的职工总人数就加1。

CREATE TRIGGER insert_taigger after insert 
on EMPLOYEES
BEGIN
UPDATE DEPARTMENTS T 
SET T.TOTALNUMBER=T.TOTALNUMBER+1
WHERE T.DEPTNO=:NEW.DEPTNO;
END;

案例二

某数据库中有关系STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT),各属性分别表示学号,姓名,性别,年龄,以及所在的系;COURSE(CNO , CNAME,CCREDIT) ,各属性分别表示课程名,学分;SC(SNO,CNO,GRADE)为学生选课表,各属性分别表示学号,课程号和分数;
完成下列的SQL语句:
定义一个AFTER的行级触发器PRINT_F,如果往成绩表SC中插入的成绩小于60就打印不及格

create trigger PRINT_F 
after insert on SC
for each row
begin
    ifnew.grade<60)then
        dbms_output.put_line(’不及格‘);
    end if; 
 end;

案例三

在这里插入图片描述
设计1:创建触发器,在删除一个部门记录后,删除该部门下的所有员工的记录。
设计2:创建触发器,在增加一个部门记录后,在员工表中增加一条在这个部门下的员工。
设计3:创建触发器,在更新一个部门编号后,更新该部门下的所有员工的部门编号。
设计4:创建触发器,如果删除的员工的empid为1时,那么不允许删除,而其他员工可以被删除。

1、 create trigger del_dept after delete
on t_dept for each row
begin
delete from t_emp T
where T.deptid=:old.deptid;
end;

2.create trigger insert_dept after insert
on t_dept for each row
begin
insert into t_emp(empid,empname,deptid) values(5,’jason05’,:new.deptid);
end;

3.create trigger up_tigger after update
on t_dept for each row
begin
update t_emp T set T.deptid=:new.deptid where T.deptid=:old.deptid;
end;

4.create trigger del_trigger after delete
on t_emp for each row
begin
if :old.deptid=1 then
raise_application_error(-20000,’不允许删除该记录’);
end if;
end; 

最后

以上就是迷路戒指为你收集整理的SQL触发器一、触发器的语法如下二、案例一的全部内容,希望文章能够帮你解决SQL触发器一、触发器的语法如下二、案例一所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部