Oracle-触发器

简介

触发器:trigger
数据库中的触发器是一个与表相关的存储plsql的语句
每当一个特定的数据操作语句(DML, insertupdate ,delete)在指定的表上发出时, oracle自动执行触发器中定义的语句序列

语法

例如:当部门表新增一条记录后,自动打印:′恭喜你,数据已经成功插入到dept表中

drop trigger触发器的名字;--删除触发器

--创建触发器

create or replace trigger触发器的名字推荐写tri_XXX

before | after

insert/ update | delete 语句on表名

for each row

declare

--声明变量

begin

--输出语句

end;

注意事项:

for each row说明触发器当前为行触发器,

行触发器要求当一个 DML (insert ,update, delete)语句操作影响数据库中的多行数据时,对子其中的每个行数据,只要他们符合触发约束条件,均激活一次触发器

delete from dept where depid in (1,2,3,4,5)

语句触发器将整个语句操作作为触发事件,当他符合约束条件时,激活一次触发器当省略 for each row时,before|after为语句触发器,

示例

sql 复制代码
-- 为 grade表 增加数据后, 在控制台输出 添加成功

-- 创建触发器
create or replace trigger tri_grade_1
after insert
on grade
declare
begin
    dbms_output.put_line('添加成功');
end;


-- 激活触发器
insert into grade(id,name) values(999,'触发器测试');

-- 将 年级编号为 3的 名称 修改为  触发器, 修改后, 输出,  数据修改成功.

-- 删除 年级编号为 999 ,8,9,10,1001,2002 的年级信息,删除后, 输出,  数据删除成功.

drop trigger tri_grade_1;   -- 删除 触发器 ,  drop trigger 触发器名

create or replace trigger tri_grade_1
 after delete on grade
 declare
 begin
   dbms_output.put_line('删除成功');
 end;



delete from grade where id in (999 ,8,9,10,1001,2002);   -- 输出 1遍 删除成功


select * from grade;

		
		
create or replace trigger tri_grade_1
 after delete on grade
 for each row
 declare
 begin
   dbms_output.put_line('删除成功');
 end;
	
		delete from grade where id in (7,8,3003,4004);   -- 执行删除后,受影响行数为 3,因此 输出 3遍 删除成功
		
sql 复制代码
--触发器配合序列做insert dept
drop sequence seq_dept_depid; --删除序列
-- 1创建序列
create sequence seq_dept_depid
start with 1500
increment by 1
nocycle
nocache;
--2.创建触发器
drop trigger tri_dept;
create or replace trigger tri_dept
before insert
on dept
for each row
declare
begin
select seq_dept_depid.nextval --通过学列名.nextval获得值,
into: new.depid               --将序列产生的值赋值给dept表的depid列
from dual;
dbms__output.put_line('恭喜你,数据插入成功");
end;
--3.测试触发器
insert into dept (depname)values('触发器及序列');

练习

1.编写plsql实现查询年级编号为1的年级名称,并输出年级编号为1的年级名称为XX

2.定义2个变量,比较两个变量的值,谁的值大,输出XX的值比YY的值大

3.编写触发器,当执行为修改部门名字后,显示修改部门名称成功.

4.定义游标,遍历显示学生姓名,考试成绩,科目编号

相关推荐
l12586520 小时前
# RAG重排序实战:硅基流动bge-reranker-v2-m3在线API vs 本地CrossEncoder,一篇讲透两种方案
数据库·人工智能·python·深度学习·算法·机器学习·langchain
张洛闻Eren20 小时前
MySQL 管理复制拓扑【MySQL第四课】
linux·运维·数据库·mysql
西安景驰电子21 小时前
《PTP精确时间协议系列》第二篇:工程部署、调试与性能优化
运维·服务器·网络·数据库·windows·性能优化
xrkhy21 小时前
redis-shake的使用windows版本
数据库·windows·redis
小王C语言1 天前
MySQL 内置函数:日期函数、字符串函数、数学函数、其他函数
数据库·mysql
ClouGence1 天前
当 AI 开始直接操作数据库,传统数据库管理工具还有必要吗?
数据库·后端·agent
渣渣盟1 天前
误删数据之后:MySQL、PostgreSQL、Oracle三库紧急恢复完全实操手册
mysql·postgresql·oracle
teak_on_my_way1 天前
外网通过 Nginx 访问 Doris Stream Load:一次 HTTP 307 疑难排查与完整代理方案
运维·数据库·nginx·http
Hugh-Yu-1301231 天前
zhangxuefeng-skill配置教程
数据库
布莱克6051 天前
理解B+树:原理、特性与应用场景
数据结构·数据库·mysql