大型数据库实验报告学院:信息技术学院班级:软件1班专业:计算机&软件工程&数媒姓名:刘国栋日期:2020-03-3010:21:00学号:10010300791.实验目的掌握触发器的原理掌握触发器的编写方法测试触发器是否生效2.实验内容(注意,实验代码和过程中产生的数据要上交,请同学们用SPOOL命令记录下代码和过程)1.创建语句级触发器,名称为triDML+姓名简拼+学号后两位;功能为:对scott用户的emp表进行dml操作的用户进行安全检查,如果不是scott用户,则不能够做增、删、改的操作。(提示用ifusernotin(‘SCOTT’)then来判断是否为scott用户)。createtriggertriDMLlgd79beforeinsertorupdateordeleteonscott.empbeginifusernotin('scott')thenraise_application_error(-20001,'你现在不是在scott用户下,不能对emp表做增、删、改');endif;end;2.创建行级触发器,名称为triROW+姓名简拼+学号后两位;功能为:当对scott用户的emp表插入数据时,如果deptno30时,将comm值设置为0。createtriggertriROWlgd79beforeinsertonempforeachrowbeginifnew.deptno30then:new.comm:=0;end;3.创建替代触发器,名称为triInsteadOf+姓名简拼+学号后两位。功能为:可以往视图里插入数据。提示:创建一个视图view_emp_dept,数据来源于emp表的字段empno,ename,job,emp.deptno,条件是emp.deptno=dept.deptno。创建替代触发器,使得可以对视图view_emp_dept进行插入数据的操作。createorreplaceviewview_emp_deptasselectempno,ename,job,emp.deptnofromemp,deptwhereemp.deptno=dept.deptno;createorreplacetriggertriInsteadOflgd79insteadofinsertonview_emp_deptforeachrowdeclarebegininsertintoemp(empno,ename,job,deptno)values(:New.empno,:New.ename,:New.job,:New.deptno);end;4.创建DDL触发器,名称为triDDL+姓名简拼+学号后两位。功能为:记录当前用户删除对象的信息。提示:可以创建一个表来实现记录功能createtableddl_drop(User_idvarchar2(30),Object_typevarchar2(20),Object_namevarchar2(30),Object_ownervarchar2(30),Create_datedate);。createorreplacetriggertriDDLlgd79afterdroponscott.schemabegininsertintoddl_dropvalues(ora_login_user,ora_dict_obj_type,ora_dict_obj_name,ora_dict_obj_owner,SYSDATE);end;5.创建数据库级触发器,名称为triDB+姓名简拼+学号后两位。功能为:记录数据库发生错误的信息。提示:可以通过创建下面的表来实现记录数据库发生错误的信息。Createtableerror_log(Timestampdate,Usernamevarchar2(20),Instancenumber,Database_namevarchar2(50),Error_stackvarchar2(2000));Sys.login_user返回当前登录的用户名称Sys.instance_num返回实例数Sys.database_name返回数据库名称DBMS_UTILITY.FORMAT_ERROR_STACK返回Errorstack。createorreplacetriggertriDBlgd79aftercreateondatabasebegininsertintoddl_dropvalues(SYSDATE,Sys.login_user,Sys.instance_num,Sys.database_name,DBMS_UTILITY.FORMAT_ERROR_STACK);end;4.实验记录实验代码和过程中产生的数据要上交,请同学们用spool命令记录下代码和过程5.分析总结5.1.遇到的问题及解决方法5.2.实验心得及存在的问题