电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Oracle中的觸發(fā)器trigger

瀏覽:133日期:2023-03-12 15:25:09

觸發(fā)器是指被隱含執(zhí)行的存儲過程

一、創(chuàng)建DML觸發(fā)器(before/after)

1、行觸發(fā)器:

當一個DML操作影響DB中的多行時,對于其中復(fù)合觸發(fā)條件的每行均觸發(fā)一次(for each row)

例1: 建立一個觸發(fā)器, 當職工表 emp 表被刪除一條記錄時,把被刪除記錄寫到職工表刪除日志表中去。

CREATE OR REPLACE TRIGGER tr_del_emp   BEFORE DELETE --指定觸發(fā)時機為刪除操作前觸發(fā)   ON scott.emp   FOR EACH ROW   --說明創(chuàng)建的是行級觸發(fā)器BEGIN   --將修改前數(shù)據(jù)插入到日志記錄表 del_emp ,以供監(jiān)督使用。   INSERT INTO emp_his(deptno , empno, ename , job ,mgr , sal , comm , hiredate )       VALUES( :old.deptno, :old.empno, :old.ename , :old.job,:old.mgr, :old.sal, :old.comm, :old.hiredate );END;

例2:級聯(lián)更新:利用行觸發(fā)器實現(xiàn)級聯(lián)更新。在修改了主表regions中的region_id之后(AFTER),級聯(lián)的、自動的更新子表countries表中原來在該地區(qū)的國家的region_id

CREATE OR REPLACE TRIGGER tr_reg_couAFTER update OF region_idON regionsFOR EACH ROWBEGIN DBMS_OUTPUT.PUT_LINE("舊的region_id值是"||:old.region_id  ||"、新的region_id值是"||:new.region_id); UPDATE countries SET region_id = :new.region_id WHERE region_id = :old.region_id;END;

例3:限定只對部門號為80的記錄進行行觸發(fā)器操作。

CREATE OR REPLACE TRIGGER tr_emp_sal_commBEFORE UPDATE OF salary, commission_pct       OR DELETEON HR.employeesFOR EACH ROWWHEN (old.department_id = 80)BEGIN CASE     WHEN UPDATING ("salary") THENIF :NEW.salary < :old.salary THEN     RAISE_APPLICATION_ERROR(-20001, "部門80的人員的工資不能降");END IF;     WHEN UPDATING ("commission_pct") THEN  IF :NEW.commission_pct < :old.commission_pct THEN   RAISE_APPLICATION_ERROR(-20002, "部門80的人員的獎金不能降");END IF;     WHEN DELETING THEN  RAISE_APPLICATION_ERROR(-20003, "不能刪除部門80的人員記錄");     END CASE;END;  /*實例:UPDATE employees SET salary = 8000 WHERE employee_id = 177;DELETE FROM employees WHERE employee_id in (177,170);*/

2、語句觸發(fā)器:

將整個DML語句作為觸發(fā)條件,當它符合約束條件時,激活一次觸發(fā)器。

限制對Departments表修改(包括INSERT,DELETE,UPDATE)的時間范圍,即不允許在非工作時間修改departments表。

CREATE OR REPLACE TRIGGER tr_dept_timeBEFORE INSERT OR DELETE OR UPDATEON departmentsBEGIN IF (TO_CHAR(sysdate,"DAY") IN ("星期六", "星期日")) OR (TO_CHAR(sysdate, "HH24:MI") NOT BETWEEN "08:30" AND "18:00") THEN     RAISE_APPLICATION_ERROR(-20001, "不是上班時間,不能修改departments表"); END IF;END;

二、創(chuàng)建替代(instead of )觸發(fā)器

用于對視圖(沒有指定WITH CHECK OPTION選項)的DML觸發(fā)。

  • 只能被創(chuàng)建在視圖上。
  • 不能指定BEFORE 或 AFTER選項。
  • FOR EACH ROW子可是可選的,即INSTEAD OF觸發(fā)器只能在行級上觸發(fā)、或只能是行級觸發(fā)器,沒有必要指定。

創(chuàng)建INSTEAD_OF觸發(fā)器來為 DELETE 操作執(zhí)行所需的處理,即刪除EMP表中所有基準行:

CREATE OR REPLACE TRIGGER emp_view_delete   INSTEAD OF DELETE ON emp_view FOR EACH ROWBEGIN   DELETE FROM emp WHERE deptno= :old.deptno;END emp_view_delete;

三、創(chuàng)建系統(tǒng)事件觸發(fā)器(on schema/on database)

1、當建立在模式(SCHEMA)之上時,只有模式所指定用戶的DDL操作和它們所導(dǎo)致的錯誤才激活觸發(fā)器, 默認時為當前用戶模式。

例1:創(chuàng)建觸發(fā)器,存放有關(guān)事件信息。

--創(chuàng)建觸犯發(fā)器CREATE OR REPLACE TRIGGER tr_ddlAFTER DDL ON SCHEMABEGIN   INSERT INTO ddl_event VALUES   (systimestamp,ora_sysevent, ora_login_user,    ora_dict_obj_type, ora_dict_obj_name);END tr_ddl;

2、當建立在數(shù)據(jù)庫(DATABASE)之上時,該數(shù)據(jù)庫所有用戶的DDL操作和他們所導(dǎo)致的錯誤,以及數(shù)據(jù)庫的啟動和關(guān)閉均可激活觸發(fā)器。

要在數(shù)據(jù)庫之上建立觸發(fā)器時,要求用戶具有ADMINISTER DATABASE TRIGGER權(quán)限。

例1:創(chuàng)建登錄觸發(fā)器。

CREATE OR REPLACE TRIGGER tr_logonAFTER LOGON ON DATABASEBEGIN   INSERT INTO log_event (user_name, address, logon_date)   VALUES (ora_login_user, ora_client_ip_address, systimestamp);END tr_logon;

四、重新編譯觸發(fā)器

ALTER TRIGGER  trigger  COMPILE

刪除觸發(fā)器:當刪除表或視圖時,建立在這些對象上的觸發(fā)器也隨之刪除。

DROP TRIGGER trigger_name;

禁用或啟用觸發(fā)器

ALTER TRIGGER emp_view_delete DISABLE| ENABLE;--使表EMP 上的所有TRIGGER 失效:ALTER TABLE emp DISABLE ALL TRIGGERS;

觸發(fā)器和數(shù)據(jù)字典

相關(guān)數(shù)據(jù)字典:USER_TRIGGERS、ALL_TRIGGERS、DBA_TRIGGERS

Oracle 字符集

到此這篇關(guān)于Oracle觸發(fā)器trigger的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持。

標簽: Oracle
相關(guān)文章:
主站蜘蛛池模板: GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 交流伺服电机|直流伺服|伺服驱动器|伺服电机-深圳市华科星电气有限公司 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 课件导航网_ppt课件_课件模板_课件下载_最新课件资源分享发布平台 | 江苏皓越真空设备有限公司| 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 天津电机维修|水泵维修-天津晟佳机电设备有限公司 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 学习虾-免费的学习资料下载平台| 选矿设备,选矿生产线,选矿工艺,选矿技术-昆明昆重矿山机械 | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 汽车水泵_汽车水泵厂家-瑞安市骏迪汽车配件有限公司 | 上海三信|ph计|酸度计|电导率仪-艾科仪器 | 广东之窗网| 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | 过跨车_过跨电瓶车_过跨转运车_横移电动平车_厂区转运车_无轨转运车 | 耐火浇注料价格-高强高铝-刚玉碳化硅耐磨浇注料厂家【直销】 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 防火门-专业生产甲级不锈钢钢质防火门厂家资质齐全-广东恒磊安防设备有限公司 | 合肥展厅设计-安徽展台设计-合肥展览公司-安徽奥美展览工程有限公司 | 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 外贸资讯网 - 洞悉全球贸易,把握市场先机 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 泰安办公家具-泰安派格办公用品有限公司| 厌氧工作站-通用型厌氧工作站-上海胜秋科学仪器有限公司 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 伶俐嫂培训学校_月嫂培训班在哪里报名学费是多少_月嫂免费政府培训中心推荐 | 生物除臭剂-除味剂-植物-污水除臭剂厂家-携葵环保有限公司 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 |