oracle对象之触发器

触发器

数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。

1.触发器作用

  • 数据确认 
  • 实施复杂的安全性检查
  • 做审计,跟踪表上所做的数据操作等
  • 数据的备份和同步

2.触发器的类型

语句级触发器 :在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行 。

行级触发器(FOR EACH ROW) :触发语句作用的每一条记录都被触发。在行级触发器中使用old和new伪记录变量, 识别值的状态。

语法:

CREATE  [or REPLACE] TRIGGER  触发器名

   {BEFORE | AFTER}

   {DELETE | INSERT | UPDATE [OF 列名]}

   ON  表名

   [FOR EACH ROW [WHEN(条件) ] ]

declare

    ……

begin

   PLSQL

End 触发器名;

 1 范例:插入员工后打印一句话“一个新员工插入成功”
 2
 3 create or replace trigger testTrigger
 4
 5   after insert on person
 6
 7 declare
 8
 9   -- local variables here
10
11 begin
12
13   dbms_output.put_line(‘一个员工被插入‘);
14
15 end testTrigger;

 1 范例:不能在休息时间插入员工
 2
 3 create or replace trigger validInsertPerson
 4
 5   before insert on person
 6
 7 declare
 8
 9   weekend varchar2(10);
10
11 begin
12
13   select to_char(sysdate, ‘day‘) into weekend from dual;
14
15   if weekend in (‘星期一‘) then
16
17     raise_application_error(-20001, ‘不能在非法时间插入员工‘); //抛出一个可以接受的异常
18
19   end if;
20
21 end validInsertPerson;

当执行插入时会报错

在触发器中触发语句与伪记录变量的值


触发语句

:old

:new

Insert

所有字段都是空(null)

将要插入的数据

Update

更新以前该行的值

更新后的值

delete

删除以前该行的值

所有字段都是空(null)
 1 范例:判断员工涨工资之后的工资的值一定要大于涨工资之前的工资
 2
 3 create or replace trigger addsal4p
 4
 5   before update of sal on myemp
 6
 7   for each row
 8
 9 begin
10
11   if :old.sal >= :new.sal then
12
13     raise_application_error(-20002, ‘涨前的工资不能大于涨后的工资‘);
14
15   end if;
16
17 end;

调用

update myemp t set t.sal = t.sal - 1;

时间: 2024-11-03 22:23:15

oracle对象之触发器的相关文章

Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么在pl/sql中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据. 语法: CURSOR  游标名  [ (参数名  数据类型,参数名 数据类型,...)]  IS  SELECT   语句; 例如:cursor c1 is select ename from emp; 游标

PL/SQL和Oracle对象

PL/SQL -一.变量 01)引用变量 -- 查询并打印7839的姓名和薪水 declare    --定义变量保存姓名和薪水    --pename varchar2(20);    --psal   number;    pename emp.ename%type;    psal   emp.sal%type; begin   -- 得到1234的姓名和薪水   select ename,sal into pename,psal from emp where empno=1234;   

oracle 存储过程 ,触发器练习

/*以下代码是对emp表进行显示宽度设置 */col empno for 9999;col ename for a10;col job for a10;col mgr for 9999;col hiredate for a12;col sal for 9999;col comm for 9999;col deptno for 99;col tname for a12;set pagesize 50; //----------------------------------------------

Oracle中创建触发器示例及注意事项

Oracle中创建触发器示例及注意事项 1.oracle 中创建触发器示例 CREATE TABLE "CONCEPT"."FREQUENCYMODIFYLOG" ( "FREQUENCYID" NUMBER(10,0), "NAME" NVARCHAR2(30), "CODE" VARCHAR2(10 CHAR), "MNEMONICCODE" VARCHAR2(10 CHAR), &

Oracle中的触发器

Oracle中的触发器,布布扣,bubuko.com

oracle 如何用触发器实现更新刚插入的数据集合

oracle 如何用触发器实现更新刚插入的数据集合 1.建立测试表 create table TEST_TB ( ID   NUMBER, WLID NUMBER, PM   VARCHAR2(100), DJZT VARCHAR2(10), SL   NUMBER, PH   VARCHAR2(100) ); 2.建立带ref cursor定义的包和包体及函数: CREATE OR REPLACE package pkg_test as /* 定义ref cursor类型 不加return类型

oracle 如何用触发器实现更新刚插入的数据

oracle 如何用触发器实现更新刚插入的数据create or replace trigger tr_namebefore inserton 表for each rowbegin:new.某字段='新值';end; 修改A表的某条数据的某个字段AA(这个字段是规定好的),在保存后A表的该条数据的另一个字段BB会根据一个函数把AA字段的值处理后更新create or replace trigger BF_ZJ_UPDATEZJM   after update of aa on a for eac

Oracle对象权限

对象权限指访问其他方案的权利,用户直接访问自己的方案的对象,但是如果要访问别的方案的 对象,则必须具有对象的权限. 比如smith用户要访问scott.emp表(scott:方案,emp:表),则不需再scott.emp 表上具有对象的权限. 常用的对象权限: Alter --修改(修改表结构) delete --删除 Select --查询 insert --添加 Update --修改(更新数据) index --索引 References --引用 execute --执行 显示对象权限

(八)Oracle学习笔记—— 触发器

1. 触发器简介 触发器在数据库里以独立的对象存储,类似于过程(procedure)和函数(function),都有声明,执行和异常处理过程的PL/SQL块.它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行.即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接收参数. 所以运行触发器就叫触发或点火(firing).ORACLE事件指的是对数据库的表进行的INSERT.UPDATE及DELETE操作或对视图进行类似的操作.ORACLE将触发器