触发器运用示例---laobai

--1 禁止将emp的用户名修改为含有sb关键字
--创建emp表的update行前触发器
create or replace trigger emp_update_ename_tri
before update on scott.emp for each row
declare
begin
  if (instr(upper(:new.ename),‘SB‘)>0) then
    raise_application_error(-20001,‘禁止将emp表的用户名修改为含SB‘);
   end if;
   dbms_output.put_line(‘修改emp成功!‘||sysdate);
end;

--测试触发器
update scott.emp set ename=‘SSSA‘ where empno=‘7369‘

--2 备份表的测试
 --删除scott.emp表时,可以自动备份表插入被删除的记录
 --创建备份表
 create table emp_bk as (select * from scott.emp)
 truncate table emp_bk
 --
 select * from emp_bk;

 --创建scott.emp的delete行前触发器

 create or replace trigger emp_delete_bk_tri
 before delete on scott.emp for each row
 declare
 begin
   dbms_output.put_line(‘开始备份...‘);
   insert into emp_bk values(:old.empno,:old.ename,:old.job,
   :old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno);
   dbms_output.put_line(‘完成备份...‘);
 end;

delete from scott.emp  where empno=‘7369‘
delete from scott.emp  where ename like ‘%黑%‘

select * from scott.emp 

--3  免主键的自增

create table person
(
  pid number primary key ,
  pname varchar2(20) not null
)
select * from person;
create sequence person_se

truncate table person;

insert into person values(person_se.nextval,‘白‘||person_se.currval);
insert into person (pname) values(‘白100‘);

--创建insert行前触发器,可以省略主键的自增
create or replace trigger person_inser_tri
before insert on person for each row
declare
v_no number;
v_count number;
begin
   if(:new.pid is null)   then
   loop
    select person_se.nextval into v_no  from dual;
    select count(1) into v_count from person where pid=v_no;
    if(v_count=0) then  --此次生成的新序号不存在的,是有效的
      :new.pid := v_no;
      exit;
    end if;
     end loop;
    end if;
 end;

 insert into person (pid,pname) values(‘38‘,‘白100‘);

  

时间: 2024-08-28 12:29:49

触发器运用示例---laobai的相关文章

【mysql】mysql触发器使用示例

mysql触发器 时间点:before/after 触发事件: update/delete/insert 时间点+触发事件:构成一个完整的触发器的触发时机: 一个触发时机最多只能由1个Trigger:如 before-insert最多只能有1个触发器,如果需要多个,需要在1个Trigger内些sql Statement: old和new insert:只有new关键字可以使用: update: new和old关键字都可以使用: delete: 只有old关键字可以使用: 完整语句 CREATE

问题:Oracle出发器;结果:1、Oracle触发器详解,2、Oracle触发器示例

ORACLE触发器详解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INSTEAD OF)触发器 8.2.3 创建系统事件触发器 8.2.4 系统触发器事件属性 8.2.5 使用触发器谓词 8.2.6 重新编译触发器 8.3 删除和使能触发器 8.4 触发器和数据字典 8.5   数据库触发器的应用举例 触发器是许多关系数据库系

SQL Server 触发器创建、删除、修改、查看示例

一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted表.这两个表. 一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发器都创建了两个专用表﹕Ins

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

目  录 触发器使用教程和命名规范 1 1,触发器简介 1 2,触发器示例 2 3,触发器语法和功能 3 4,例一:行级触发器之一 4 5,例二:行级触发器之二 4 6,例三:INSTEAD OF触发器 6 7,例四:语句级触发器之一 8 8,例五:语句级触发器之二 9 9,例六:用包封装触发器代码 10 10,触发器命名规范 11 1,触发器简介 触发器(Trigger)是数据库对象的一种,编码方式类似存储过程,与某张表(Table)相关联,当有DML语句对表进行操作时,可以引起触发器的执 行

SQL触发器实例(下)

1 基本语法: 2 Create Trigger [TriggerName] 3 ON [TableName] 4 FOR [Insert][,Delete][,Update] 5 AS 6 --触发器要执行的操作语句. 7 Go 8 9 注意: 10 触发器中不允许以下 Transact-SQL 语句: 11 Alter DATABASE ,Create DATABASE,DISK INIT, 12 DISK RESIZE, Drop DATABASE, LOAD DATABASE, 13 L

(十二)PL/SQL触发器

触发器是存储程序,它会自动执行或发射当一些事件发生.触发器,事实上,写入响应于以下任一事件将被执行:   数据库操作(DML)语句(DELETE,INSERT,UPDATE或)   数据库定义(DDL)语句(CREATE,ALTER或DROP)   数据库操作(SERVERERROR,登录,注销,启动或关机)触发器可以在表,视图,模式或数据库与该事件相关联上定义. 触发器的优点  自动生成一些派生列值  实施参照完整性  事件日志和对表的访问存储信息  审计  表的同步复制  实行安全许可  防

Oracle触发器实例(网搜)

触发器使用教程和命名规范 目  录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEAD OF触发器 67,例四:语句级触发器之一 88,例五:语句级触发器之二 99,例六:用包封装触发器代码 1010,触发器命名规范 11 1,触发器简介触发器(Trigger)是数据库对象的一种,编码方式类似存储过程,与某张表(Table)相关联,当有DML语句对表进行操作时,可以引起触发器的执行

ORACLE触发器的管理与实际应用【weber出品】

一.INSTEAD OF触发器 对于简单的视图可以执行INSERT,UPDATE和DELETE操作,但是对于复杂视图,不允许直接执行INSERT,UPDATE,DELETE操作,当视图出现以下任何一种情况时,都不允许直接执行DML操作,如下: 具有集合操作符(UNION,UNION ALL,INTERSECT,MINUS) 具有分组函数(MIN,MAX,SUM,AVG,COUNT等) 具有GROUP BY,CONNECT BY或START WITH等子句 具有DISTINCT关键字 具有连接查询

SQL触发器实例讲解

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.       常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: Create Table Student(              --学生表         StudentID int primary key,       --学号         ....        )