两个经典的Oracle触发器示例 .

转载 2015年07月09日 10:00:14

【案例一】

题目:
--触发器:
--添加员工信息,流水号作为自动编号(通过序列生成),
--并且判断如果工资小于0,则改为0;如果大于10000,则改为10000。

CREATE TABLE emp2(
e_id NUMBER,
e_no NUMBER,
e_name VARCHAR2(20),
e_sal NUMBER
)

SELECT * FROM emp2;

CREATE SEQUENCE seq_trg_id;

INSERT INTO emp2(e_id,e_no,e_name,e_sal) VALUES(seq_trg_id.nextval,7788,'章子',
 1000000000000)
INSERT INTO emp2(e_id,e_no,e_name,e_sal) VALUES(seq_trg_id.nextval,7788,'章子怡',-10)


CREATE OR REPLACE TRIGGER trg_add_emp_info
  BEFORE INSERT
  ON emp2
  FOR EACH ROW
  DECLARE
    -- local variables here
  BEGIN
    SELECT seq_trg_id.NEXTVAL INTO :NEW.e_id FROM dual;
    IF  :NEW.e_sal < 0 THEN
       :NEW.e_sal := 0;
    ELSIF  :NEW.e_sal > 10000 THEN
       :NEW.e_sal := 10000;
    END IF;
  END;

 

【 案例二】

题目:

--扩充练习:
--为emp建立触发器,将删除的记录放到emp3表中(autoid,deptno,empno,ename,del_rq-删除日期)
--测试代码

CREATE TABLE emp3(
autoid NUMBER PRIMARY KEY,
deptno NUMBER,
empno NUMBER,
ename VARCHAR2(20),
del_rq DATE
)

CREATE SEQUENCE seq_trg_del_autoid;

INSERT INTO emp
  (empno, ename, deptno)
VALUES
  (114, '阿娇', 10);
 COMMIT;
 
 SELECT * FROM emp;
 
 DELETE emp WHERE empno = 114;
 SELECT * FROM emp3;
 
 答案:

CREATE OR REPLACE TRIGGER trg_del_emp_info
  BEFORE DELETE
  ON emp
  FOR EACH ROW
  DECLARE
    -- local variables here
  BEGIN
    INSERT INTO emp3(autoid,deptno,empno,ename,del_rq)
          VALUES(seq_trg_del_autoid.NEXTVAL,:OLD.deptno,:OLD.empno,:OLD.ename,sysdate);
  END;

 

 

两个经典的Oracle触发器示例

【案例一】 题目: --触发器: --添加员工信息,流水号作为自动编号(通过序列生成), --并且判断如果工资小于0,则改为0;如果大于10000,则改为10000。 CREATE ...
  • u012307002
  • u012307002
  • 2014年05月03日 18:12
  • 444

02.两个经典的Oracle触发器示例

【案例一】 题目: --触发器: --添加员工信息,流水号作为自动编号(通过序列生成), --并且判断如果工资小于0,则改为0;如果大于10000,则改为10000。 CREATE ...
  • kele16504
  • kele16504
  • 2017年04月11日 15:23
  • 125

Oracle触发器 同一事件激活两个触发器

5.11 同一事件激活两个触发器问题现在需要创建一个触发器,把SYSDATE的值插入LOCATIONS表的HIRE_DATE字段。但是这个表已经有一个BEFORE INSERT触发器,而你又不希望这两...
  • suding3
  • suding3
  • 2016年12月14日 12:16
  • 1034

oracle 一个表上的多个触发器的执行顺序

oracle 一个表上的多个触发器的执行顺序如下:before statement trigger->before row trigger->after row trigger->after stat...
  • fupei
  • fupei
  • 2009年08月10日 11:11
  • 4023

oracle触发器实例及异常处理

1.写触发器的业务需求:     我需要在工单表(up_ask)插入数据或更新数据时通过触发器(currentnew_ask_trigger)将工单表的数据插入到一个中间表(nosc_reportn...
  • u012255097
  • u012255097
  • 2017年08月11日 11:50
  • 194

Oracle 触发器 插入,更新,删除,数据同步,两表同步

建表: create table User_Info (    ID                   INTEGER                         not null,...
  • tanguang_honesty
  • tanguang_honesty
  • 2014年04月30日 13:49
  • 1009

Oracle各类触发器的使用实例

最近在读Oracle触发器,试着编写了几个触发器,还算实用,放在自己的数据库中。现jiang...
  • ll328062201
  • ll328062201
  • 2014年09月27日 10:21
  • 2102

触发器会出现死循环!~~

这几天突然会有这样的一个需求,需要重复表的记录, 除了插入到表的记录的AC列不同之外,其余的字段完全相同的。对于这个需求,我一开始想到的是在倒入数据文件的时候,它会删掉原表的数据,那就使用一个触发器来...
  • hbhg2007xs
  • hbhg2007xs
  • 2015年10月22日 15:38
  • 341

Oracle 触发器两表同步

触发器无需commit也不能写commit触发器和触发它的DML是同一个事务DML提交了,触发器的操作也提交了,要不就一起回滚了当然,如果你一定要在触发器里写COMMIT那就用自治事务相当于一个事务里...
  • zqpgood
  • zqpgood
  • 2011年05月03日 15:03
  • 2512

两个oracle数据库中表数据同步(DBLINK+TRIGGER)

数据库数据同步方式有很多,使用Logminer、GoldenGate、DataGurd等基于oracle日志方式的同步,或者使用dblink+trigger进行同步,也可以通过代码的job方式进行同步...
  • caoyue_new
  • caoyue_new
  • 2018年01月12日 13:50
  • 79
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:两个经典的Oracle触发器示例 .
举报原因:
原因补充:

(最多只允许输入30个字)