图解Oracle 12c 触发器实例
生活随笔
收集整理的這篇文章主要介紹了
图解Oracle 12c 触发器实例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
實例1 級聯(lián)更新
這是Oracle所附帶示例數(shù)據(jù)庫的表,雇員表,包括姓名,薪水,部門編號等列;
這是部門表;這兩個表是外鍵關(guān)聯(lián);
做一個觸發(fā)器,實現(xiàn)級聯(lián)更新;當(dāng)修改部門表的部門編號時,自動更新雇員表相關(guān)列;
CREATE OR REPLACE TRIGGER tr_dept_cou AFTER update OF deptno ON dept FOR EACH ROW BEGINDBMS_OUTPUT.PUT_LINE('舊的deptno值是'||:old.deptno||'、新的deptno值是'||:new.deptno);UPDATE emp SET deptno = :new.deptnoWHERE deptno = :old.deptno; END;
修改以前的部門編號20為2000;看觸發(fā)器是否觸發(fā);
出現(xiàn)上圖錯誤;看部門表的字段信息,deptno列的類型是number(2,0);
改20為82看下情況;
看雇員表,部門編號20已經(jīng)自動更新為82;
這是生成的觸發(fā)器;
那么如何看到DBMS輸出呢;需要在菜單里選擇一下;
實例2?after觸發(fā)器
create or replace trigger emp_trg_raiAfter insert on empFor each rowdeclareBeginDbms_output.put_line('員工姓名:' || :new.ename);Dbms_output.put_line('崗位:' || :new.job);Dbms_output.put_line('工資:' || :new.sal);Dbms_output.put_line('觸發(fā)器已被執(zhí)行');End;當(dāng)在emp插入數(shù)據(jù)后觸發(fā)器執(zhí)行;
實例3 限制字段值范圍(以薪水為例)
創(chuàng)建序列,創(chuàng)建觸發(fā)器,插入語句,代碼如下;Create sequence seq_trg_id Increment by 1 Start with 7935 Maxvalue 999999 Minvalue 1 Nocycle nocacheCREATE OR REPLACE TRIGGER trg_add_emp_infoBEFORE INSERTON empFOR EACH ROWDECLARE-- local variables hereBEGINSELECT seq_trg_id.NEXTVAL INTO :NEW.empno FROM dual;IF :NEW.sal < 0 THEN:NEW.sal := 0;ELSIF :NEW.sal > 10000 THEN:NEW.sal := 10000;END IF;END;set serveroutput on; insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(seq_trg_id.nextval,'芷若','clerk',7902 ,null,-1100,null,20); insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(seq_trg_id.nextval,'敏敏','clerk',7902 ,null,11100,null,20); insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(seq_trg_id.nextval,'小昭','clerk',7902 ,null,1200,null,20);
這是創(chuàng)建完成的序列;
插入數(shù)據(jù);
看觸發(fā)器執(zhí)行情況,小昭的薪水正常,芷若的因為小于0而為0,敏敏的因為大于10000而為10000;
總結(jié)
以上是生活随笔為你收集整理的图解Oracle 12c 触发器实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解Oracle 12c 安装示例数据库
- 下一篇: 用RadASM 开发窗口程序