当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle认证综合辅导:两个经典的Oracle触发器示例
发布时间:2012/9/29 13:50:00 来源:城市网学院 编辑:admin
   【案例一】
    题目:
    --触发器:
    --添加员工信息,流水号作为自动编号(通过序列生成),
    --并且判断如果工资小于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; [NextPage]    【 案例二】
    题目:
    --扩充练习:
    --为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;
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved