




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库系统实验报告七学号姓名实验时间2014-12-31实验名称触发器实验学时2准备材料1. SQL Plus命令手册2. PL/SQL用户手册3. 实验教材中实验七扩展实验1.完成触发器的定义、执行与管理操作 (此部分内容不要求在实验室完成,不用写入实验报告。)实验环境Oracle 9i(及以上版本)服务器SQL Plus/ SQL Plus work sheet客户端实验目的1 熟悉PL/SQL语法2. 利用PL/SQL编程访问数据库实验内容及步骤1. 完成实验指导书实验七所有实验内容【训练1】CREATE TABLE logs(LOG_ID NUMBER(10) PRIMARY KEY,LOG_TABLE VARCHAR2(10) NOT NULL,LOG_DML VARCHAR2(10),LOG_KEY_ID NUMBER(10),LOG_DATE DATE,LOG_USER VARCHAR2(15);CREATE SEQUENCE logs_id_squ INCREMENT BY 1 START WITH 1 MAXVALUE 9999999 NOCYCLE NOCACHE;CREATE OR REPLACE TRIGGER DML_LOGBEFORE -触发时间为操作前DELETE OR INSERT OR UPDATE - 由三种事件触发ON empFOR EACH ROW - 行级触发器BEGINIF INSERTING THEN INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,EMP,INSERT,:new.empno,SYSDATE,USER); ELSIF DELETING THEN INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,EMP,DELETE,:old.empno,SYSDATE,USER); ELSE INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,EMP,UPDATE,:new.empno,SYSDATE,USER); END IF;END;INSERT INTO emp(empno,ename,job,sal) VALUES(8001,MARY,CLERK,1000);COMMIT;SELECT * FROM LOGS;【练习1】修改、删除刚刚插入的雇员记录,提交后检查LOGS表的结果。update emp set sal = sal*5where ename = MARY;COMMIT;DELETE FROM emp WHERE empno = 8001;COMMIT;SELECT * FROM LOGS;【练习2】为DEPT表创建同样的触发器,使用LOGS表进行记录,并检验结果。CREATE OR REPLACE TRIGGER DEPT_LOGBEFORE -触发时间为操作前DELETE OR INSERT OR UPDATE - 由三种事件触发ON deptFOR EACH ROW - 行级触发器BEGINIF INSERTING THEN INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,DEPT,INSERT,:new.deptno,SYSDATE,USER); ELSIF DELETING THEN INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,DEPT,DELETE,:old.deptno,SYSDATE,USER); ELSE INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,DEPT,UPDATE,:new.deptno,SYSDATE,USER); END IF;END;INSERT INTO dept(deptno,dname,loc) VALUES(50,JIAN,GUANGZHOU);COMMIT;SELECT * FROM LOGS;【训练2】CREATE TABLE logerr(NUM NUMBER(10) NOT NULL,MESSAGE VARCHAR2(50) NOT NULL);CREATE OR REPLACE TRIGGER log_salBEFOREUPDATE OF salON empFOR EACH ROWWHEN (new.job=CLERK AND (ABS(new.sal-old.sal)200) DECLARE v_no NUMBER;BEGIN SELECT COUNT(*) INTO v_no FROM logerr; INSERT INTO logerr VALUES(v_no+1,雇员|:new.ename|的原工资:|:old.sal|新工资:|:new.sal);END;UPDATE emp SET sal=sal+550 WHERE empno=7788;UPDATE emp SET sal=sal+500 WHERE empno=7369;UPDATE emp SET sal=sal+50 WHERE empno=7876;COMMIT;SELECT * FROM logerr;【训练3】CREATE OR REPLACE TRIGGER CHECK_SALBEFOREUPDATEON empFOR EACH ROWBEGINIF :new.job=CLERK AND (:new.sal2000) THEN RAISE_APPLICATION_ERROR(-20001, 工资修改超出范围,操作取消!); END IF;END;UPDATE emp SET sal=800 WHERE empno=7876;UPDATE emp SET sal=450 WHERE empno=7876;COMMIT;SELECT empno,ename,job,sal FROM emp WHERE empno=7876;【练习3】限定对emp表的修改,只能修改部门10的雇员工资。CREATE OR REPLACE TRIGGER CHECK_NOBEFOREUPDATEON empFOR EACH ROWBEGINIF :new.DEPTNO10 THEN RAISE_APPLICATION_ERROR(-20001, 修改的部门不符,操作取消!); END IF;END;UPDATE emp SET sal=8000 WHERE deptno=20;UPDATE emp SET sal=6789 WHERE deptno=30;UPDATE emp SET sal=888 WHERE deptno=10;select * from emp;【训练4】CREATE TRIGGER CASCADE_UPDATEAFTER UPDATE OF deptnoON DEPTFOR EACH ROWBEGINUPDATE EMP SET EMP.DEPTNO=:NEW.DEPTNOWHERE EMP.DEPTNO=:OLD.DEPTNO;END;UPDATE dept SET deptno=11 WHERE deptno=10;COMMIT;SELECT empno,ename,deptno FROM emp;【练习4】建立级联删除触发器CASCADE_DELETE,当删除部门时,级联删除EMP表的雇员记录。CREATE TRIGGER CASCADE_DELETEAFTER DELETE ON DEPT FOR EACH ROWBEGINDELETE FROM EMP WHERE EMP.DEPTNO=:OLD.DEPTNO;END;DELETE FROM DEPT WHERE DEPTNO = 11;COMMIT;SELECT * FROM EMP;SELECT * FROM DEPT;【训练5】CREATE OR REPLACE TRIGGER INITCAPBEFORE INSERT ON EMPFOR EACH ROWBEGIN :new.ename:=INITCAP(:new.ename);END;INSERT INTO emp(empno,ename,job,sal) VALUES(1000,BILL,CLERK,1500);SELECT ename,job,sal FROM emp WHERE empno=1000;【练习5】限定一次对雇员的工资修改不超过原工资的10%。CREATE OR REPLACE TRIGGER CHECK_SALARYBEFOREUPDATE OF SAL ON EMPFOR EACH ROWBEGIN IF :new.SAL = :old.SAL*1.1 THEN :new.SAL:= :old.SAL; ELSIF :new.SAL = :old.SAL*0.9 THEN :new.SAL:= :old.SAL; END IF;END;SELECT * FROM EMP WHERE EMPNO = 7876;UPDATE EMP SET SAL = SAL*1.08 WHERE EMPNO = 7876;COMMIT;SELECT * FROM EMP WHERE EMPNO = 7876;7.2.4【训练1】CREATE OR REPLACE TRIGGER CHECK_TIMEBEFOREUPDATE OR INSERT OR DELETE ON EMPBEGIN IF (TO_CHAR(SYSDATE,DY) IN (SAT,SUN) OR TO_CHAR(SYSDATE,HH24)=17 THENRAISE_APPLICATION_ERROR(-20500,非法时间修改表错误!);END IF; END;UPDATE EMP SET SAL=3000 WHERE EMPNO=7369;【练习1】设计一个语句级触发器,限定只能对数据库进行修改操作,不能对数据库进行插入和删除操作。在需要进行插入和删除时,将触发器设置为无效状态,完成后重新设置为生效状态。CREATE OR REPLACE TRIGGER onlyupdateBEFOREUPDATE OR INSERT OR DELETE ON EMPBEGIN IF deleting or inserting thenRAISE_APPLICATION_ERROR(-20500,非法操作!);END IF; END;7.3【训练1】CREATE OR REPLACE TRIGGER NODROP_EMPBEFOREDROP ON SCHEMA BEGINIF Sys.Dictionary_obj_name=EMP THENRAISE_APPLICATION_ERROR(-20005,错误信息:不能删除emp表!);END IF; END;DROP TABLE emp;7.4【训练1】CREATE VIEW emp_name AS SELECT ename FROM emp;CREATE OR REPLACE TRIGGER change_name INSTEAD OF INSERT ON emp_nameDECLAREV_EMPNO NUMBER(4);BEGIN SELECT MAX(EMPNO)+1 INTO V_EMPNO FROM EMP; INSERT INTO emp(empno,ename) VALUES(V_EMPNO,:new.ename);END;INSERT INTO emp_name VALUES(BROWN);COMMIT;【训练2】CREATE OR REPLACE TRIGGER delete_from_enameINSTEAD OF DELETE ON emp_nameBEGIN RAISE_APPLICATION_ERROR(-20006,错误信息:不能在视图中删除emp表的雇员!);END;实验七创建触发器,进行表的同步复制CREATE OR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厂矿消防知识培训
- 云南省峨山彝族自治县高中生物 第五章 细胞的能量供应和利用 5.4.2 影响光合作用因素教学设计 新人教版必修1
- 隔物灸产品培训
- 多媒体信息技术与教学融合的培训成果
- 一年级语文上册 第一单元 1 天地人配套教学设计 新人教版
- 九年级化学下册:第10单元 课题1 常见的酸和碱教学设计
- 人教部编版七年级历史上册 第12课《汉武帝巩固大一统王朝》教学设计
- 安全教育培训总结
- 药理学练习试题及答案
- 2024分析技术考试-环保检测练习卷附答案
- 2025数据要素可信共享交换标准规范
- 乡村老年人活动中心建设方案
- 川教版(2024)小学信息技术三年级上册《跨学科主题活动-在线健康小达人》教学实录
- 2025年上海外服招聘笔试参考题库含答案解析
- 英语课堂中的思政元素融入策略研究
- 新文化运动课件
- 糖尿病合并输尿管结石
- 管线标志桩施工方案
- 机械专业英语
- 扬州市“无废城市”建设实施方案(2022-2025年)
- 汽车乘员仿真RAMSIS操作指南
评论
0/150
提交评论