您的位置:首页 > 财经 > 产业 > 项目计划书包括哪些内容_网络营销速成培训班_口碑营销的模式_百度软件中心

项目计划书包括哪些内容_网络营销速成培训班_口碑营销的模式_百度软件中心

2025/4/6 2:53:28 来源:https://blog.csdn.net/2302_81846649/article/details/146905067  浏览:    关键词:项目计划书包括哪些内容_网络营销速成培训班_口碑营销的模式_百度软件中心
项目计划书包括哪些内容_网络营销速成培训班_口碑营销的模式_百度软件中心

触发器是Oracle数据库中的一种特殊存储过程,它会在特定数据库事件发生时自动执行。触发器通常用于实现复杂的业务规则、数据验证、审计跟踪等功能。

目录

一、触发器基本概念

1. 触发器特点

2. 触发器组成要素

二、触发器类型

1. DML触发器

2. DDL触发器

3. 系统/数据库事件触发器

4. INSTEAD OF触发器

三、创建DML触发器

1. 基本语法

2. 行级触发器示例

3. 语句级触发器示例

四、特殊触发器

1. 复合触发器(11g+)

2. INSTEAD OF触发器(用于视图)

3. 系统事件触发器

五、触发器中的特殊变量和函数

1. OLD 和 NEW 伪记录

2. 事件属性函数

3. 条件谓词

4. 简单示例

5. 简单练习

六、触发器管理

1. 查看触发器

2. 启用/禁用触发器

3. 重新编译触发器

4. 删除触发器

七、触发器最佳实践

八、常见问题解决方案

1. 避免触发器递归

2. 处理大批量操作

3. 跨数据库同步

九、触发器使用注意事项


一、触发器基本概念

触发器在数据库里以独立的对象存储,他与存储过程不同的是,存储过程通过其他程序来启动运行或者直接运行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行,并且触发器不接收参数。 

1. 触发器特点

  • 自动执行:满足条件时由数据库自动触发

  • 事件驱动:响应特定DML或DDL操作

  • 无显式调用:不能像存储过程那样直接调用

  • 事务感知:作为触发语句的一部分执行

2. 触发器组成要素

  • 触发事件:INSERT、UPDATE、DELETE等DML操作

  • 触发时机:BEFORE或AFTER

  • 触发级别:行级(FOR EACH ROW)或语句级

  • 触发条件:WHEN子句定义的条件

  • 触发体:PL/SQL代码块

二、触发器类型

1. DML触发器

响应数据操作语言(DML)事件:

  • INSERT

  • UPDATE

  • DELETE

  • MERGE (10g+)

2. DDL触发器

响应数据定义语言(DDL)事件:

  • CREATE

  • ALTER

  • DROP

  • TRUNCATE等

3. 系统/数据库事件触发器

响应数据库系统事件:

  • 登录/注销(LOGON/LOGOFF)

  • 服务器错误(SERVERERROR)

  • 启动/关闭(STARTUP/SHUTDOWN)

4. INSTEAD OF触发器

用于视图上的DML操作

三、创建DML触发器

语句级触发器(statement):当某触发事件发生时,该触发器执行一次

行级触发器(row):当某触发事件发生时,受到影响的每一行数据,触发器都单独执行一次

1. 基本语法

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF}
{INSERT | UPDATE | DELETE [OR INSERT | UPDATE | DELETE...]}
ON {table_name | view_name}
[REFERENCING [OLD AS old] [NEW AS new]]
[FOR EACH ROW]
[WHEN (condition)]
[DECLAREdeclaration_statements]
BEGINexecutable_statements
[EXCEPTIONexception_handling_statements]
END [trigger_name];--化说明
create or replace trigger tri_name--创建触发器
{before/after}--触发的时间点{DML操作} on 表名
{for each row}--加上是行级触发,不加是语句级
{when 条件}
begin
{referencing {OLD {as} old|new {as} NEW}new PARENT as parent}---触发器的执行部分
end;
/-- 简单示例1
create or replace trigger tr_1before delete on emp11
begininsert into emp12(ename)select ename from emp where empno = 7369;
end;
/
-- 简单示例2
--创建一个触发器 当删除emp1表中的数据时,向emp2插入7788的员工信息
--并且删除emp3中7788的信息。
-- 准备
create table emp1 as select * from emp;
create table emp2 as select * from emp;
create table emp3 as select * from emp;
-- 创建触发器
create or replace trigger tr_1before delete on emp1
begininsert into emp2(ename, sal)select ename, sal from emp where empno = 7788;delete from emp3 where empno = 7788;
end;
/
-- 触发
delete from emp1 where empno=7788;

2. 行级触发器示例

-- 薪资变更审计触发器
CREATE OR REPLACE TRIGGER audit_salary_change
BEFORE UPDATE OF salary ON employees
FOR EACH ROW
WHEN (NEW.salary <> OLD.salary)
DECLAREv_change_type VARCHAR2(10);
BEGIN-- 确定变更类型IF :NEW.salary > :OLD.salary THENv_change_type := 'RAISE';ELSEv_change_type := 'CUT';END IF;-- 记录审计信息INSERT INTO salary_audit (audit_id, employee_id, old_salary, new_salary,change_type, change_date, changed_by) VALUES (audit_seq.NEXTVAL, :NEW.employee_id,:OLD.salary, :NEW.salary,v_change_type, SYSDATE, USER);
END audit_salary_change;
/

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com