两个经典的Oracle触发器实例,两个经典的Oracle触发器示例

【案例一】

题目:

--触发器:

--添加员工信息,流水号作为自动编号(通过序列生成),

--并且判断如果工资小于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;

原文出处:http://blog.csdn.net/justdo2008/archive/2009/04/29/4137779.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值