图解Oracle 12c 触发器实例
生活随笔
收集整理的這篇文章主要介紹了
图解Oracle 12c 触发器实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實例1 級聯更新
這是Oracle所附帶示例數據庫的表,雇員表,包括姓名,薪水,部門編號等列;
這是部門表;這兩個表是外鍵關聯;
做一個觸發器,實現級聯更新;當修改部門表的部門編號時,自動更新雇員表相關列;
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;看觸發器是否觸發;
出現上圖錯誤;看部門表的字段信息,deptno列的類型是number(2,0);
改20為82看下情況;
看雇員表,部門編號20已經自動更新為82;
這是生成的觸發器;
那么如何看到DBMS輸出呢;需要在菜單里選擇一下;
實例2?after觸發器
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('觸發器已被執行');End;當在emp插入數據后觸發器執行;
實例3 限制字段值范圍(以薪水為例)
創建序列,創建觸發器,插入語句,代碼如下;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);
這是創建完成的序列;
插入數據;
看觸發器執行情況,小昭的薪水正常,芷若的因為小于0而為0,敏敏的因為大于10000而為10000;
總結
以上是生活随笔為你收集整理的图解Oracle 12c 触发器实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解Oracle 12c 安装示例数据库
- 下一篇: 用RadASM 开发窗口程序