- 浏览: 60330 次
- 来自: 上海
最新评论
create or replace trigger updEmp_trig before update on emp for each row declare -- local variables here begin dbms_output.put_line('触发器被触发了...'); --设计要求,将更新以后的工资插入一张新表emp2中, --这个新表的结构与EMP表中雇员的基本信息一致 insert into emp2(empno,ename,sal) values(:old.empno,:old.ename,:new.sal); dbms_output.put_line(:old.empno||' 号雇员,姓名为:'||:old.ename||' , 他的工资由 '||:old.sal||' 变化到了 '||:new.sal); end updEmp_trig; --只能够通过前触发器完成此项任务,不可以是后触发器 create or replace trigger employees_ins_trigger before insert or update on employees referencing old as old_value new as new_value for each row --只有不等于80部门的数据才导致触发器工作 when (new_value.department_id<>80) declare -- local variables here begin --只有80部门的雇员能够获得COMMISSION_PCT的值,其它部门的值设为0 --将commission_pct的值设置为0 :new_value.commission_pct:=0; end employees_ins_trigger; --假设使用后触发器会怎么样? --触发器编译报错。因为按照业务逻辑,为了实现这个业务,必须使用前触发器。 --只能够通过前触发器完成此项任务,不可以是后触发器 create or replace trigger employees_ins_trigger after insert or update on employees referencing old as old_value new as new_value for each row --只有不等于80部门的数据才导致触发器工作 when (new_value.department_id<>80) declare -- local variables here begin --只有80部门的雇员能够获得COMMISSION_PCT的值,其它部门的值设为0 --将commission_pct的值设置为0 :new_value.commission_pct:=0; end employees_ins_trigger; --只有在工作时间才能够对HR用户的EMPLOYEES表和DEPARTMENTS表做DML操作 --工作时间定义为 8:00AM——17:00PM create or replace trigger emplyoees_limits_trig before insert or update or delete on employees for each row declare -- local variables here v_timestr varchar2(30); begin --只有在工作时间才能够对HR用户的EMPLOYEES表和DEPARTMENTS表做DML操作 --工作时间定义为 8:00AM——17:00PM --对系统时间作出分析,如果对操作时间进行分解以后,判断小时数小于8:00 --或者小时数大于17:00,则引发错误。 select to_char(sysdate,'yyyy-mm-dd:hh24:mi:ss') into v_timestr from dual; if(小时数<8 or 小时数>17) then raise_application_error(-20001,'非工作时间,不能进行DML操作'); end if; end emplyoees_limits_trig; --认识行级触发器与语句级触发器的区别 create or replace trigger updEmp_stmt_trig before update on emp declare -- local variables here begin dbms_output.put_line('语句级触发器被触发了...'); end updEmp_trig; create or replace trigger updEmp_trig before update on emp for each row declare -- local variables here begin dbms_output.put_line('触发器被触发了...'); --设计要求,将更新以后的工资插入一张新表emp2中, --这个新表的结构与EMP表中雇员的基本信息一致 insert into emp2(empno,ename,sal) values(:old.empno,:old.ename,:new.sal); dbms_output.put_line(:old.empno||' 号雇员,姓名为:'||:old.ename||' , 他的工资由 '||:old.sal||' 变化到了 '||:new.sal); end updEmp_trig; --自动派生值 --当我们向一张数据表中插入数据时,希望id这个列的值能够自动增长(初始值为1000), --每次增加1 create table testtab( newsid number not null, newstitle varchar2(50), newstype varchar2(30) ); insert into testtab values(999,'意大利与新西兰1:1战平','世界杯新闻'); select * from testtab; insert into testtab values(88,'西安地区最近持续高温','社会新闻'); --为了解决这个问题,需要两个数据库对象,并且他们还需要关联以后才能够解决 --第一个对象是序列或者序号 create sequence testtab_seq minvalue 1000 maxvalue 999999 start with 1000 increment by 1; --testing insert into testtab values(testtab_seq.nextval,'意大利与新西兰1:1战平','世界杯新闻'); insert into testtab values(testtab_seq.nextval,'西安地区最近持续高温','社会新闻'); insert into testtab values(66,'西安地区最近持续高温','社会新闻'); insert into testtab values(4500,'西安地区最近持续高温','社会新闻'); select * from testtab; --第二步需要将序号和触发器关联 commit; --只能够通过前触发器完成此项任务,不可以是后触发器 create or replace trigger employees_ins_trigger before insert or update on employees referencing old as old_value new as new_value for each row --只有不等于80部门的数据才导致触发器工作 when (new_value.department_id<>80) declare -- local variables here begin --只有80部门的雇员能够获得COMMISSION_PCT的值,其它部门的值设为0 --将commission_pct的值设置为0 :new_value.commission_pct:=0; end employees_ins_trigger; create or replace trigger testtab_trig before insert on testtab for each row declare -- local variables here begin --当插入数据之前,从序号中派生值赋给insert语句中的newsid --这样就保证了newsid中的值一定是从序号中获取的 select testtab_seq.nextval into :new.newsid from dual; end testtab_trig;
发表评论
文章已被作者锁定,不允许评论。
-
ORACLE日期时间处理
2013-01-25 17:56 1231--感觉ORACLE对日期的处理比MS较方便些 --修改会 ... -
AutoTrace执行结果说明
2013-01-25 14:11 787统计信息 --------------- ... -
QUESTIONS
2011-11-25 08:51 668问题一:获取SCOTT用户中EMP表里最早入职的前五名雇员? ... -
闪回数据库技术
2011-11-25 08:51 1140SQL> conn / as sysdba;已连接 ... -
包实例
2011-11-24 09:16 745SQL> col object_name f ... -
存储过程、函数简单应用
2011-11-24 09:16 967create or replace procedure ... -
ORACLE体系结构
2011-11-24 09:15 817001、oracle体系结构: oracle产品和 ... -
游标简单操作
2011-11-25 08:50 1198--显示游标 处理检索多行数据 --whil ... -
数据泵导出导入(SCHEMAS)
2011-11-25 08:51 8524一、导出 1、 cmd-->C:\Docume ... -
PLSQL developer连接oracle
2011-11-25 08:50 993装好ORACLE 10g后,安装plsql ... -
ORACLE安装前后
2011-11-24 09:17 824安装前:计算机名必须小于8位(不能以数字开 ... -
数据库事务
2011-11-22 11:24 893查看数据库默认隔离级别: 查看InnoDB系统级别 ... -
导入TXT文件与导出TXT
2011-11-28 10:05 1014导入.TXT文件与导出*. ... -
加载数据
2011-11-28 10:05 8521、使用LOAD DATA语句要比INSERT语句的加载 ... -
字符串连接
2011-11-28 10:05 817mysql> select 'abc'+'123' ... -
DELETE语法
2011-11-28 10:06 1603仅仅在 FROM 或 USING 子句之前列出的表中的匹 ... -
复制表
2011-11-22 11:24 759创建测试表test:mysql> create tabl ... -
定时执行存储过程
2011-11-18 22:46 971存储过程学习:http://www.111 ... -
计算机localhost在网络上不存在
2011-11-22 11:22 987计算机localhost在网络上不存在——数据库 ... -
EXPLAIN语法
2011-11-29 09:09 886EXPLAIN table == DESC table ...
相关推荐
oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例
何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert,Update,Delete 事件。
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Update , Delete 事件。 我为...
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Update , Delete 事件。 我为...
SQL触发器实例讲解.doc SQL触发器实例讲解.doc SQL触发器实例讲解.doc
oracle触发器实例讲解2008-11-27 09:17--[6]// Oracle Trigger ---------------------------------------------------------------------------------------------// --实例1------------------------ --创建触发器...
自己的学习笔记,每次写触发器和存储过程,照着写就来了。附带一个权限的关系
SQL触发器实例讲解.pdf
SQL触发器实例.pdf
SQL触发器实例讲解(20211008070418).pdf
数据库 SQL触发器实例讲解.doc
触发器实例讲解-1.pdf
Oracle存储过程和触发器实例