`
ybyonline
  • 浏览: 41090 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

触发器使用

SUN 
阅读更多

触发器的使用

 

 

触发器什么时候出发呢?

 

BEFORE:在触发的DML事件发生之前执行触发器体

AFTER:在触发的DML事件发生之后执行触发器体

INSTEAD OF:执行触发器体来代替触发器事件,用于不可修改 的视图中。

 

一、语句级的触发器

  • 触发事件发生一次,触发器体便执行一次。
  • 即使没有任何记录受到影响也会触发一次。
1.触发器格式

   CREATE [OR REPLACE] TRIGGER trigger_name
		timing
			event1 [OR event2 OR event3 ]
				ON table_name
		trigger_body
 

2.创建一个语句级触发器

 

    判断更新操作是否在忙时('08:00' 到 '18:00')!如果是的话提示错误!

 

	CREATE OR REPLACE TRIGGER secure_emp
	BEFORE INSERT OR UPDATE ON emp
	BEGIN
		IF(T0_CHAR(SYSDATE,'DD') IN ('SAT','SUN')) OR     TO_CHAR(SYSDATE,'HH24:MI') 
			NOT BETWEEN '08:00' AND '18:00'
		THEN
			RAISE_APPLICATION_ERROR(-20500,'YOU MAY INSERT INTO THE EMP
			TABLE ONLY DURING BUSINESS HOURS.');
		END IF;
	END;

 

   
3.判定触发器语句
  可以使用一下谓词来确定触发器的语句类型。
UPDATING
INSERTING
DELETING
  格式:

	...
		IF UPDATING THEN 
	v_stmt:='UPDATE';
		ELSIF DELETING THEN 
	v_stmt:='DELETE'
	...
 

二、记录级的触发器
  • 对于每一条被触发事件影响的记录,触发器体便执行一次。
  • 如果触发器事件未影响任何记录,触发器将不会执行。

1、创建一个记录级触发器

 

创建格式:如下

 

	CREATE [OR REPLACE] TRIGGER trigger_name
		timing
			event1 [OR event2 OR event3	]
				ON table_name
		[REFERENCINT OLD AS old | NEW AS new]
	FOR EACH ROW
		[WHEN (condition)]
	trigger_body

 

具体事例:

 

	CREATE OR REPLACE TRIGGER restrict_salary
	BEFORE  INSERT OR UPDATE  OF sal  ON emp
	FOR EACH ROW 
	BEGIN
		IF(:NEW.job IN ('CLERK','SALESMAN'))  AND  :NEW.sal  > 5000
		THEN 
			RAISE_APPLICATION_ERROR(-20201,
			'EMPLOYEE CANNOT  EARN THIS AMOUNT.')
		END  IF;
	END;
 

三、INSTEAD OF 触发器

 

创建格式:

 

 

	CREATE [OR REPLACE] TRIGGER trigger_name
		INSTEAD OF 
			event! [OR event2 OR event3	]
				ON view_name
			[REFERENCE OLD AS old | NEW  AS new ]
			FOR EACH  ROW
		trigger_body
 

 

四、管理触发器

 

1、禁用或重新启用一个数据库触发器

 

ALTER TRIGGER trigger_name DISABLE | ENABLE;

  

2、禁用或重新启用一个表上的所有触发器

 

ALTER TABLE table_name DISABLE | ENABLE ALL ALL TRIGGERS;

 

3、重编译一张表上的触发器

 

ALTER TRIGGER my_trigger  COMPILE;

 

4、删除触发器

 

DROP TRIGGER trigger_name;

 

五、数据库触发器

 

暂无

 

六、触发器的限制

 

触发器不能:

 

执行DDL语句

执行COMMIT,ROLLBACK,SAVEPOINT语句(数据库触发器除外)

 

查看触发器信息:

包含触发器信息的数据字典:

USER_OBJECTS

USER_TRIGGERS

 

1
0
分享到:
评论

相关推荐

    专用触发器 使用教程 PDF

    在【标题】"专用触发器 使用教程 PDF"和【描述】"专用触发器 使用教程 系统详尽的讲解 PDF"中,我们可以理解这是一份详细的教程,专注于讲解如何在SQL Server中有效利用专用触发器。触发器的使用通常是为了满足用户...

    SQL触发器使用实例

    ### SQL触发器使用实例解析 #### 一、触发器概述 在数据库管理中,触发器是一种特殊类型的存储过程,它可以在特定的事件(如插入、更新或删除操作)发生时自动执行。触发器的主要作用是确保数据完整性,通过在特定...

    触发器使用教程和命名规范

    触发器使用教程和命名规范 Oracle 触发器是一种数据库对象,它与某张表相关联,当有 DML 语句对表进行操作时,可以引起触发器的执行,达到对插入记录的一致性、正确性和规范性控制的目的。 触发器的实现比较灵活,...

    SQLServer-触发器使用实例.docx

    ### SQL Server 触发器使用详解 #### 一、触发器概述 触发器是一种特殊的存储过程,当数据在表或视图中发生特定类型的更改时(如插入、更新或删除),触发器会自动运行。触发器可以确保数据的完整性和一致性,并且...

    oracle触发器使用,很详细

    触发器使用教程和命名规范 1 1,触发器简介 1 2,触发器示例 2 3,触发器语法和功能 3 4,例一:行级触发器之一 4 5,例二:行级触发器之二 4 6,例三:INSTEAD OF触发器 6 7,例四:语句级触发器之一 8 8,...

    mysql中触发器使用详解.docx

    在这里,`trigger_name`是触发器的名称,通常建议使用`table_time_event`的方式命名,如`student_after_insert`。`table_name`是你想要关联的表名,`time`可以是`BEFORE`或`AFTER`,表示触发器是在操作前还是后执行...

    mysql触发器使用实例

    通过理解和熟练运用这些知识点,你可以有效地使用MySQL触发器来增强数据库的功能,确保数据的准确性和业务流程的顺利进行。不过,要注意触发器的使用可能会增加数据库的复杂度,因此需要谨慎设计和管理。

    oracle存储过程和触发器

    删除触发器使用`DROP TRIGGER`语句,例如:`DROP TRIGGER name ON table;`。在某些情况下,可能需要暂时禁用触发器,可以使用`ALTER TABLE table DISABLE TRIGGER trigger_name;`。 **4. 实例应用** 假设我们有一个...

    触发器使用原理和常用T-SQL截取字符串操作

    结合"触发器的使用案例.txt"和"T-SQL触发器的使用",我们可以看到如何将触发器与T-SQL字符串操作结合,例如在触发器中使用SUBSTRING和CHARINDEX来分析和验证新插入或更新的数据。 总的来说,理解和熟练运用触发器...

    JK03-D三相过零触发器使用说明.pdf

    JK03-D三相过零触发器使用说明.pdf

    MYSQL触发器使用详解

    MYSQL触发器,可以使用它用来进行监控,例如商品价格变化,下单后商品库存减少等实用性操作!

    SQL触发器的使用方法,

    通过使用触发器,数据库管理员和开发人员可以实现复杂的业务逻辑和数据完整性规则,而这些规则无法通过简单的约束或存储过程单独完成。 在SQL Server中,触发器主要有以下三种类型: 1. **INSERT触发器**:当向表...

    oracle触发器使用笔记

    总之,Oracle触发器是一种强大的工具,可以帮助开发人员在数据库层面上实现复杂的业务逻辑和数据管理,但需要注意的是,过度使用触发器可能会导致性能问题,因此在设计数据库架构时应谨慎考虑其使用。

    视图、索引、存储过程、触发器使用

    创建索引时需要考虑数据的访问模式和磁盘空间的使用情况,因为虽然索引可以加速查询,但也会占用额外的存储空间,并可能影响写入性能。 ### 存储过程 存储过程是一组预编译的SQL语句,存储在数据库中,可以在需要...

    SQL Server触发器使用方法探析.pdf

    使用触发器需要注意,虽然它们提供了强大的功能,但也可能带来性能问题,因为它们增加了数据库处理的复杂性。在设计数据库系统时,应谨慎使用触发器,并充分考虑其对性能的影响。 总的来说,SQL Server触发器是...

    mysql触发器使用

    在深入探讨MySQL触发器的使用之前,我们先来理解一下什么是触发器以及它在数据库管理中的作用。触发器是数据库中一种特殊的存储过程,当特定的事件(如INSERT、UPDATE或DELETE操作)在指定的表上发生时自动执行。...

    宇电 AIJK系列三相移相 周波过零可控硅调功触发器使用说明书.rar

    宇电AIJK系列三相移相周波过零可控硅...宇电AIJK系列三相移相周波过零可控硅调功触发器的使用说明书包含了详细的安装、接线、操作和故障处理指南,用户应仔细阅读并按照说明进行操作,以确保设备的正常运行和高效使用。

    KCjD触发器使用PPT学习教案.pptx

    KCjD触发器,通常指的是D型触发器,它是一种基本的数字逻辑电路,用于存储数据或时序逻辑系统中的状态。在这个PPT学习教案中,我们深入探讨了D触发器的工作原理、特性以及其在物联网(The INTERNET of THINGS)等...

    实验五、触发器设计(2学时).docx

    该触发器使用 cursor 语句来遍历学生 transaction 表,计算每个学生的平均成绩,并更新学生表中的平均成绩列。 t2_statement 触发器的作用是当对选课表 SC 做insert、delete、update 修改时,自动将学生表中平均...

    数据库的触发器实验报告书

    这个触发器使用了`inserted`表,它是SQL Server为存储插入或更新操作的新记录而创建的一个逻辑表。 第二个触发器`CP_UPDATE`在CP表的`cpbh`字段更新时,同步更新XSCP表中的对应记录。这里使用了`inserted`和`...

Global site tag (gtag.js) - Google Analytics