oracle触发器
oracle 触发器工作原理
oracle触发器工作原理
Oracle数据库中的触发器是一种存储过程,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器可以用于实现数据一致性、审计、业务规则验证和复杂的数据处理逻辑。
以下是Oracle触发器工作原理的基本概述:
1.定义与激活:
在Oracle中,通过使用CREATE TRIGGER语句创建触发器,指定其名称、触发时机(BEFORE或AFTER)、触发事件(INSERT、UPDATE、DELETE或COMMIT等)以及作用的对象(表或视图)。
2.触发时机:
BEFORE触发器会在实际操作之前执行,此时可以查看并修改将要插入、更新或删除的数据。
AFTER触发器则在实际操作完成之后执行,此时只能查看已经更改后的结果。
3.触发上下文:
对于INSERT操作,触发器可以通过:NEW伪记录访问被插入的新行数据。
对于UPDATE操作,触发器同时可以获得:OLD和:NEW
伪记录,分别代表更新前的老数据和更新后的新数据。
对于DELETE操作,触发器可以通过:OLD伪记录访问即将被删除的行数据。
4.执行逻辑:
触发器内的PL/SQL代码会根据触发条件进行执行,可以包含任何合法的PL/SQL命令,包括对其他表的操作、控制流语句、异常处理等。
5.事务处理:
触发器是事务的一部分,所以它们遵循ACID属性,并且其行为受当前事务的影响。例如,如果事务回滚,则触发器所做的所有变更也会随之回滚。
6.实例应用:
举例来说,一个AFTER INSERT触发器可能用来记录新插入数据到审计表中;而一个BEFORE UPDATE触发器可能用于检查更新的数据是否满足某些业务规则,如果不满足则阻止更新操作。
Oracle数据库---触发器
1.创建语句触发器:
2.Oracle中的触发器可以建立在数据表或视图上。
触发器时机可以有两种选择:在实际动作之前(before)或之后(after)
3.一个触发器可以建立在多个动作之上。
触发器基本针对insert、update、delete,而不能针对insert.
4.触发器有三个谓词---inserting/updating/deleting
触发器动作可能由三个中的两个或三个组成,那么具体要判断是哪一个呢?就需要用谓词了。
5.语句触发器的作用级别为整个表,但是我们往往又需要针
对单行数据执行某种特定操作,此时应该用行触发器。
在定义的时候,最后面加了一句for each row
6.行触发器的变量引用
行触发器基本上也是对insert、update、delete进行触发,有两个系统变量’:old’和’:new’变量,我们可以利用他们来得到很好的东西。
但由于insert没有旧的数据,所以对’:old’不可用,但对’:new’还是可以用的,而delete没有新的数据,故和insert相反。
7.我们可以用referencing关键字把new或者old关键字替换成别的。
7.触发器的条件限制。
很多时候我们对行的触发,也只是需要对一部分触发。
注意:when后面的条件要用括号括起来,并且里面用的old
是old而非:old,没有冒号的。
我们分别对id=1和id=2进行操作,看输出:
对id=1操作,输出为空
对id=2操作,输出有值,因为在id=2的操作才触发触发器。8系统事件的触发
系统事件包括数据库的打开和关闭,系统错误等。
Oracle触发器(trigger)
Oracle触发器(trigger)
触发器是许多关系数据库系统都提供的⼀项技术。在ORACLE系统⾥,触发器类似过程和函数,都有声明,执⾏和异常处理过程的PL/SQL 块。
1 触发器类型
触发器在数据库⾥以独⽴的对象存储,它与存储过程和函数不同的是,存储过程与函数需要⽤户显⽰调⽤才执⾏,⽽触发器是由⼀个事件来启动运⾏。
即触发器是当某个事件发⽣时⾃动地隐式运⾏。并且,触发器不能接收参数。所以运⾏触发器就叫触发或点⽕(firing)。
ORACLE事件指的是对数据库的表进⾏的INSERT、UPDATE及DELETE操作或对视图进⾏类似的操作。
ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。
所以触发器常⽤来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或⽤来监视对数据库的各种操作,实现审计的功能。
1.1 DML触发器
ORACLE可以在DML语句进⾏触发,可以在DML操作前或操作后进⾏触发,并且可以对每个⾏或语句操作上进⾏触发。
1.2 替代触发器
由于在ORACLE⾥,不能直接对由两个以上的表建⽴的视图进⾏操作。所以给出了替代触发器。它就是ORACLE 8专门为进⾏视图操作的⼀种处理⽅法。
1.3 系统触发器
ORACLE 8i 提供了第三种类型的触发器叫系统触发器。它可以在ORACLE数据库系统的事件中进⾏触发,如ORACLE系统的启动与关闭等。
触发器组成:
触发事件:引起触发器被触发的事件。例如:DML语句(INSERT, UPDATE, DELETE语句对表或视图执⾏数据处理操作)、DDL语句(如CREATE、ALTER、DROP语句在数据库中创建、修改、删除模式对象)、数据库系统事件(如系统启动或退出、异常错误)、⽤户事件(如登录或退出数据库)。
oracle trigger 语法
oracle trigger 语法
Oracle触发器(trigger)是在表中执行的一段代码,用于在数据库中自动执行某些操作。在执行特定操作时,可以使用Oracle触发器,例如在插入或更新记录时要向某个表添加新数据。
以下是Oracle触发器的语法:
```
CREATE [ OR REPLACE ] TRIGGER trigger_name
{ BEFORE | AFTER } { INSERT | UPDATE | DELETE }
ON table_name
[ FOR EACH ROW ]
[ FOLLOWS another_trigger ]
[ ENABLE / DISABLE ]
[ DECLARE ]
[ BEGIN
trigger_body;
END; ]
```
- `CREATE [ OR REPLACE ] TRIGGER`:创建一个新的触发器或替换已经存在的触发器。
- `trigger_name`:触发器的名称。
- `{ BEFORE | AFTER }`:指定触发器在被触发的事件之前或之后执行。
- `{ INSERT | UPDATE | DELETE }`:指定触发器是在插入、更新还是删除时触发。
- `ON table_name`:指定触发器应用于哪个表。
- `[ FOR EACH ROW ]`:指定此触发器是否应逐行执行。
- `[ FOLLOWS another_trigger ]`:指定创建触发器的顺序。
- `[ ENABLE / DISABLE ]`:启用或禁用触发器。
- `[ DECLARE ]`:定义触发器所需的任何变量。
oracle触发器写法
oracle触发器写法
首先,什么是oracle触发器?Oracle触发器是一种数据库对象,它允许在进行插入,更新或删除操作时自动执行指定的动作,以此来减少人工干预,提高工作效率,实现自动化的效果。Oracle触发器的标准写法,可以让程序员更容易地实现触发器有效执行,并根据要求调整参数,以满足不同表之间的关系、结构和保证程序正确性。
在编写使用oracle触发器的程序前,必须先熟悉触发器的标准写法,以及使用触发器实现的概念。
1、创建触发器的语法格式:
CREATE [OR REPLACE] TRIGGER发器名称
{BEFORE|AFTER|INSTEAD OF} {INSERT|UPDATE|DELETE}
[ON名]
[FOR EACH ROW]
[WHEN (条件)]
BEGIN
[SQL语句]
END;
其中,CREATE OR REPLACE TRIGGER可以替换现有触发器,其余语句都是可选的部分,如果不使用,可以用空值代替。
【BEFORE | AFTER | INSTEAD OF】BEFORE命令指示表达式在触发动作之前执行,AFTER表示在触发动作之后执行,INSTEAD OF表示替换触发动作后的执行,这些是指定执行动作的时机。
【INSERT | UPDATE | DELETE】指定触发动作,可以是插入、更新或删除。
【ON名】指定触发器绑定的表,触发器可以是视图或表的触发器,但不能是索引、序列或函数的触发器。
【FOR EACH ROW】如果该语句存在,表示触发器发生的动作是每行记录的动作;如果不存在,则表示仅有整个表的动作发生。
oracle触发器大全
ORACLE 触发器大全trigger
是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
功能:
1、允许/限制对表的修改
2、自动生成派生列,比如自增字段
3、强制数据一致性
4、提供审计和日志记录
5、防止无效的事务处理
6、启用复杂的业务逻辑
开始
create trigger biufer_employees_department_id
before insert or update
of department_id
on employees
referencing old as old_value
new as new_value
for each row
when (new_value.department_id<>80 )
begin
:new_mission_pct :=0;
end;
/
触发器的组成部分:
1、触发器名称
2、触发语句
3、触发器限制
4、触发操作
1、触发器名称
create trigger biufer_employees_department_id
命名习惯:
biufer(before insert update for each row)
employees 表名
department_id 列名
2、触发语句
比如:
表或视图上的dml语句
ddl语句
数据库关闭或启动,startup shutdown 等等
before insert or update
of department_id
on employees
referencing old as old_value
new as new_value
oracle触发器中old用法
oracle触发器中old用法
在Oracle触发器中,"OLD" 是一个特殊的关键字,用于引用触发器操作之前的旧行数据。
通常,在触发器的FOR EACH ROW子句中使用"OLD"关键字来引用旧行数据。这意味着,每次触发器操作对于表中的每一行都会执行。
"OLD"关键字可以用于INSERT、UPDATE和DELETE触发器中。
在INSERT触发器中,"OLD"关键字没有作用,因为在插入操作之前并没有旧行数据。
在UPDATE触发器中,"OLD"关键字用于引用被更新的旧行数据。可以使用"OLD.column_name"来引用旧行中的特定列。
在DELETE触发器中,"OLD"关键字用于引用将要被删除的旧行数据。
以下是一个示例,展示了如何在UPDATE触发器中使用"OLD"关键字:
CREATE OR REPLACE TRIGGER update_trigger
BEFORE UPDATE ON table_name
FOR EACH ROW
BEGIN
IF :OLD.column_name <> :NEW.column_name THEN
-- Do something
END IF;
END;
在上述示例中,通过比较旧行和新行的特定列,可以执行某些操作。这是一个简单的示例,但你可以根据需要使用"OLD"关键字来执行更复杂的逻辑。
oracle 触发器case 写法
Oracle触发器是一种特殊类型的存储过程,它可以在特定的数据库操
作发生时自动执行。在实际应用中,我们经常会遇到需要使用Oracle
触发器来实现一些复杂的业务逻辑。在使用Oracle触发器时,我们需要根据具体的业务需求来设计触发器的逻辑,而针对不同的场景,需
要使用不同的触发器写法。本文将针对Oracle触发器的不同应用场景,介绍其对应的写法和注意事项。
一、触发器简介
1.1 触发器概述
Oracle触发器是一种特殊的数据库对象,它会在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动触发执行。触发器可
以在数据库级别定义,对于特定的表和事件进行相应的响应操作。在
实际应用中,触发器常用于实现数据完整性约束、数据审计、实时计
算等功能。
1.2 触发器类型
在Oracle数据库中,触发器主要分为行级触发器和语句级触发器两种类型。行级触发器会在每一行数据被操作时触发执行,而语句级触发
器则会在整个SQL语句执行完成时触发执行。在设计触发器时,需要根据具体的业务需求来选择合适的触发器类型。
二、Oracle触发器的应用场景及写法
2.1 实现数据完整性约束
在数据库中,我们经常需要实现一些数据完整性约束,如主键约束、外键约束等。而触发器可以作为实现这些约束的一种手段。我们可以使用触发器在插入或更新数据时,对数据进行校验,确保符合特定的约束条件。
对于主键约束,我们可以使用BEFORE INSERT触发器来实现,在数据插入前对主键进行校验,防止重复插入数据。示例代码如下:
```sql
CREATE OR REPLACE TRIGGER trg_check_pk
oracle触发器的创建insert使用方法
oracle触发器的创建insert使用方法Oracle触发器是与表相关联的数据库对象,可以在特定事件发生时自动触发一系列的操作。其中,INSERT触发器可以在向表中插入数据时自动执行一些操作。下面是Oracle触发器的创建及INSERT使用方法的详细介绍。
创建INSERT触发器的语法如下:
```sql
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE , AFTER , INSTEAD OF} INSERT ON table_name
[FOREACHROW]
[WHEN (condition)]
DECLARE
--定义变量
BEGIN
--触发器的主体,包含需要执行的操作
END;
```
-`ORREPLACE`:可选关键字,表示如果同名的触发器已存在,将被替换。
-`BEFORE`、`AFTER`、`INSTEADOF`:表示触发器在插入之前、之后或替代插入之前执行。
- `INSERT ON table_name`:指定触发器与哪个表相关联。
-`FOREACHROW`:可选关键字,表示触发器对每行数据都触发一次。如果不写这个关键字,触发器只在插入操作时触发一次。
- `WHEN (condition)`:可选关键字,表示触发器执行的条件。
示例:
```sql
CREATE OR REPLACE TRIGGER emp_insert_trigger
BEFORE INSERT ON employees
FOREACHROW
DECLARE
emp_count NUMBER;
oracle获取触发器创建语句
一、介绍
在数据库系统中,触发器是一种特殊的存储过程,它在特定的数据库
操作发生时被自动触发执行。触发器可以用来监测并响应特定的数据
变化,通常被用来维护数据的完整性和一致性。Oracle数据库是一种
常用的关系型数据库管理系统,它支持触发器的创建和使用。本文将
介绍如何在Oracle数据库中获取已创建的触发器的创建语句。
二、使用PL/SQL Developer获取触发器创建语句
PL/SQL Developer是一款常用的Oracle数据库开发工具,它提供了丰富的功能来管理数据库对象,并且可以方便地获取触发器的创建语句。
1. 打开PL/SQL Developer,连接到目标数据库。
2. 在“Schema Browser”窗口中选择目标数据库对象的“Triggers”标签。
3. 在触发器列表中选择目标触发器,右键点击并选择“Show SQL”,即可获取该触发器的创建语句。
三、使用SQL查询获取触发器创建语句
除了使用PL/SQL Developer外,我们也可以通过SQL查询来获取已创建触发器的创建语句。
1. 使用SYSTEM用户登入数据库。
2. 执行以下SQL查询语句来获取目标触发器的创建语句:
```
SELECT dbms_metadata.get_ddl('TRIGGER',
'YOUR_TRIGGER_NAME', 'YOUR_SCHEMA_NAME') FROM dual;
```
其中'YOUR_TRIGGER_NAME'为目标触发器的名称,
'YOUR_SCHEMA_NAME'为触发器所在的Schema名称。
navicat oracle触发器创建示例
在Navicat中创建Oracle触发器的示例如下:
1. 首先,打开Navicat并连接到Oracle数据库。
2. 在左侧的数据库列表中,找到要创建触发器的表,右键点击该表,选择"设计表"。
3. 在弹出的"设计表"窗口中,找到需要添加触发器的字段,右键点击该字段,选择"创建触发器"。
4. 在弹出的"创建触发器"窗口中,输入触发器的名称、类型(BEFORE或AFTER)以及触发时机(INSERT、UPDATE或DELETE)。
5. 编写触发器的逻辑代码。例如,创建一个在插入数据之前自动将某个字段值加1的触发器:
```sql
CREATE OR REPLACE TRIGGER trg_example
BEFORE INSERT ON example_table
FOR EACH ROW
BEGIN
:new.some_field := :new.some_field + 1;
END;
/
```
6. 保存并关闭"设计表"窗口。
7. 在Navicat的主界面,找到刚刚创建的触发器,右键点击它,选择"执行SQL脚本"。这将在数据库中实际创建触发器。
oracle中触发器条件写法
oracle中触发器条件写法
在Oracle中,触发器的条件写法是通过使用WHEN子句来实现的。在创建触发器时,可以在触发器的定义中包含WHEN子句,以便在满足特定条件时触发触发器的操作。
触发器的基本语法如下:
sql.
CREATE OR REPLACE TRIGGER trigger_name.
BEFORE/AFTER INSERT/UPDATE/DELETE.
ON table_name.
FOR EACH ROW.
WHEN (condition)。
BEGIN.
-触发器操作。
END;
在上述语法中,WHEN子句用于指定触发器的条件。条件可以是
任何返回TRUE或FALSE的表达式,如果条件返回TRUE,则触发器
的操作将被执行,否则将被忽略。
例如,如果我们希望在某个表的特定列满足条件时触发触发器,可以这样定义触发器:
sql.
CREATE OR REPLACE TRIGGER trg_example.
BEFORE INSERT.
ON my_table.
FOR EACH ROW.
WHEN (new_column > 100)。
BEGIN.
-触发器操作。
END;
在上面的例子中,触发器trg_example将在满足条件
new_column > 100时触发,触发器操作将被执行。
需要注意的是,触发器的条件必须是一个有效的SQL表达式,并且必须返回TRUE或FALSE。此外,条件中可以包含对NEW和OLD 伪行的引用,以便在条件中使用触发器操作之前和之后的值。
总之,Oracle中触发器的条件写法是通过使用WHEN子句来指定触发器的条件,条件为返回TRUE或FALSE的SQL表达式,可以包含对NEW和OLD伪行的引用。
oracle触发器delete写法
oracle触发器delete写法
Oracle触发器是数据库中一种特殊类型的存储过程,它会在特
定的数据库操作(如插入、更新或删除)发生时自动运行。在本文中,我们将详细介绍Oracle触发器的删除写法。
要删除一个Oracle触发器,我们可以使用DROP TRIGGER语句。该语句的基本语法如下:
DROP TRIGGER trigger_name;
其中,trigger_name是要删除的触发器的名称。值得注意的是,删除触发器需要具有适当的权限。
在删除触发器之前,我们可以使用以下语句查询数据库中的所有触发器:
SELECT trigger_name, trigger_type, triggering_event,
table_owner, base_object_type, table_name
FROM all_triggers
WHERE owner = 'schema_name';
其中,trigger_name是触发器的名称,trigger_type是触发器的
类型(如BEFORE或AFTER),triggering_event是触发器所
响应的事件(如INSERT、UPDATE或DELETE),
table_owner是触发器所属的表的所有者,base_object_type是
基本对象类型(如TABLE),table_name是触发器所属的表
的名称。
要删除一个触发器,我们可以使用以下语句:
DROP TRIGGER trigger_name;
其中,trigger_name是要删除的触发器的名称。
oracle触发器相关参数
oracle触发器相关参数
Oracle触发器是一种在数据库中定义的特殊类型的存储过程,可以在执行特定的数据库操作时自动触发。触发器使用一组定义在数据库表上的规则来监视数据的变化,并在满足特定条件时执行相应的动作。
触发器有许多参数可以定义和配置,以下是一些常用的触发器相关参数:
1. 触发事件(Triggering Event):触发器可以定义在不同的事件上,如INSERT、UPDATE和DELETE等。当满足触发事件时,触发器将被激活执行。
2. 触发器类型(Trigger Type):Oracle触发器主要分为行级触发器和语句级触发器两种类型。行级触发器在每一行数据修改时被激活,而语句级触发器在每次执行SQL语句时被激活。
3. 触发时间(Triggering Time):触发器可以定义在不同的时间点上,如BEFORE和AFTER。BEFORE触发器在操作执行之前触发,而AFTER触发器在操作执行之后触发。
4. 触发器限制(Trigger Restrictions):触发器可以受到一些限制,如触发器的执行顺序、触发器的嵌套级别等。这些限制可以保证触发器的执行顺序和一致性。
5. 触发器条件(Trigger Condition):触发器可以定义一些条件,只有满足条件时才会触发。条件可以是简单的逻辑表达式或者复杂的SQL查询。
6. 触发器动作(Trigger Action):触发器可以定义在满足条件时执行的动作,可以是简单的SQL语句或者复杂的存储过程。触发器可以修改数据、插入新的数据、删除数据等。
oracle触发器
– 示例:系统登录及退出 • DDL触发器
– 在创建和删除数据库对象执行的触发器 – 示例:记录scott模式下所有创建和删除对象信息。
第十七页,共二十三页。
管理 触发器 (guǎnlǐ)
• 显示触发器 • 禁止触发器
– 何时禁止:数据导入导出时禁止
• 激活触发器 • 重新编译触发器
第二十三页,共二十三页。
ON t1 FOR EACH ROW
DECLARE BEGIN
SELECT seq_t1_id.NEXTVAL INTO :NEW.t_id FROM dual;
END
第八页,共二十三页。
演示(yǎnshì)
DML触发器
• 案例2: – 更新员工时,工资只能增加,不能减少。 – 分析:当emp发生update事件时,检查前后(qiánhòu)工资,如果变少,则通过抛出异常中断 更新事件。 – 知识点:使用:old和:new。
• 使用场合 – 控制数据安全
– 实现数据审计 – 实现数据完整性 – 实现参照完整性
第十六页,共二十三页。
其它(qítā)触发器
• INSTEAD OF触发器
– 让不能更新的视图(如多表联接)能够完成“更新”
– 注意(zhùyì):简单的视图(只有一个表)本身是可以更新的。
• 系统事件触发器 – 在系统事件(启动,关闭)时自动执行的触发器
oracle 触发器case写法
Oracle触发器是一种用于在数据库发生特定事件时自动执行某些操作
的数据库对象。触发器可以用于在数据插入、更新或删除时执行特定
的逻辑,以确保数据的完整性和一致性。在Oracle数据库中,触发器是一种强大的工具,可以帮助数据库开发人员实现复杂的业务逻辑和
数据处理需求。
在使用Oracle触发器时,我们需要根据具体的业务需求来编写相应的触发器,以确保触发器能够正确地响应数据库中发生的事件,并执行
相应的操作。在编写Oracle触发器时,我们需要遵循一定的写法和规范,以确保触发器的可靠性和可维护性。
以下是关于Oracle触发器编写的一些常见的写法和注意事项:
1. 指定触发器的事件类型和触发时机
在编写Oracle触发器时,首先需要明确触发器要响应的事件类型和触发时机。Oracle触发器可以在数据插入(INSERT)、更新(UPDATE)或删除(DELETE)时触发,我们需要根据具体的业务需求来选择合适的事件类型和触发时机。
2. 触发器的创建和定义
在指定了触发器要响应的事件类型和触发时机之后,我们需要使用
CREATE TRIGGER语句来创建和定义触发器。在触发器的定义中,需要指定触发器的名称、所属的表名、触发时机以及触发器的逻辑。
3. 触发器的语法和逻辑
在编写Oracle触发器的逻辑时,需要使用PL/SQL语言来实现触发器的逻辑。我们可以在触发器中编写适当的PL/SQL代码来执行数据处理、业务逻辑或其他操作。在编写触发器的逻辑时,需要确保逻辑的正确性和可靠性,以确保触发器能够正确地执行所需的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
伯触发器
是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
功能:
1、允许/限制对表的修改
2、自动生成派生列,比如自增字段
3、强制数据一致性
4、提供审计和日志记录
5、防止无效的事务处理
6、启用复杂的业务逻辑
开始
create trigger biufer_employees_department_id
before insert or update
of department_id
on employees
referencing old as old_value
new as new_value
for each row
when (new_value.department_id<>80 )
begin
:new_mission_pct :=0;
end;
/
触发器的组成部分:
1、触发器名称
2、触发语句
3、触发器限制
4、触发操作
1、触发器名称
create trigger biufer_employees_department_id 命名习惯:
biufer(before insert update for each row)employees 表名
department_id 列名
2、触发语句
比如:
表或视图上的DML语句
DDL语句
数据库关闭或启动,startup shutdown 等等
before insert or update
of department_id
on employees
referencing old as old_value
new as new_value
for each row
说明:
1、无论是否规定了department_id ,对employees表进行insert的时候
2、对employees表的department_id列进行update的时候
3、触发器限制
when (new_value.department_id<>80 )
限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。
其中的new_value是代表跟新之后的值。
4、触发操作
是触发器的主体
begin
:new_mission_pct :=0;
end;
主体很简单,就是将更新后的commission_pct列置为0
触发:
insert into employees(employee_id,
last_name,first_name,hire_date,job_id,email,department _id,salary,commission_pct )
values( 12345,’Chen’,’Donny’, sysdate, 12,
‘donny@’,60,10000,.25);
select commission_pct from employees where employee_id=12345;
触发器不会通知用户,便改变了用户的输入值。
触发器类型:
1、语句触发器
2、行触发器
3、INSTEAD OF 触发器
4、系统条件触发器
5、用户事件触发器
1、语句触发器
是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、
DELETE或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次
。比如,无论update多少行,也只会调用一次update语句触发器。例子:
需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。
Create table foo(a number);
Create trigger biud_foo
Before insert or update or delete
On foo
Begin
If user not in (‘DONNY’) then
Raise_application_error(-20001, ‘You don’t have access to modify this table.’);
End if;
End;
/
即使SYS,SYSTEM用户也不能修改foo表
[试验]
对修改表的时间、人物进行日志记录。
1、建立试验表
create table employees_copy as select *from
hr.employees
2、建立日志表
create table employees_log(
who varchar2(30),
when date);
3、在employees_copy表上建立语句触发器,在触发器中填充employees_log 表。
Create or replace trigger biud_employee_copy
Before insert or update or delete
On employees_copy
Begin
Insert into employees_log(
Who,when)
Values( user, sysdate);
End;
/
4、测试
update employees_copy set salary= salary*1.1;