初识Oracle 五 (自用) 触发器
2021/9/17 19:05:37
本文主要是介绍初识Oracle 五 (自用) 触发器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
26.触发器
数据库触发器是一个与表关联的plsql代码段,当特定的数据库语句(insert,delete,update)执行时,Oracle会自动执行触发器里面的代码。
26.1.触发器可用于:
数据确认
实施复杂的安全性检查
做审计,跟踪表上所做的数据操作
数据的备份和同步
26.2.类型
1.语句级:在指定操作语句之前或之后执行一次,不管该语句有多大影响
2.行级:触发语句对应的每一条记录都会触发,在行级触发器中用old和new作为伪记录变量,识别值的状态。
26.3.语法:
create or replace trigger 触发器名
before/after
update/insert/delete [of 列名]
on 表名
[for each row [when ...]]
begin
plsql代码
end 触发器名;
例:
简单的触发器:效果:在person表中插入新数据时打印‘要插入新数据了’
create or replace trigger insertmess
before insert on person
begin
dbms_output.put_line('要插入新数据了');
end insertmess;
例2:效果:读取入职时间(当前时间)的值,如果为休息日则不能插入信息
create or replace trigger valid_insert_p
before insert on person
declare
varday varchar2(10);
begin
select to_char(sysdate,'day') into varday from dual;
if varday = 'sunday' then --注:一般这样写(在星期天)然后插入语句时,还是能插入语句,因为to_char输出的字符串会在最后加几个空格,这边有两个解决方法 1.运行一遍select语句直接把输出的复制粘贴到这边写Sunday的地方 2.在varday前加上trim(去空格)函数(个人更倾向于这种方法)
raise_application_error(-20001,'今天礼拜,不能插入数据');
end if;
end valid_insert_p;(可不写触发器名)
例3.行级触发器
create or replace trigger triggertest
before update on person
begin
if :new.sal<=:old.sal then--注:new与':'之间不要有空格,不然会报错
raise_application_error(-20002,'这不是涨工资,这是降工资!');
end if;
end ;--这里同样可以不写
这篇关于初识Oracle 五 (自用) 触发器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11国产医疗级心电ECG采集处理模块
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南