文档详情

Oracle实验6下触发器和包.doc

发布:2017-08-30约5.31千字共8页下载文档
文本预览下载声明
《数据库开发技术》实验_6(下)__报告 实验题目:PL/SQL的触发器与包 日期 2015.12.6 班级 计算机1301 姓名 实验环境:win10+oracle 11g 实验内容与完成情况(记录所有的实验过程): 编写一个触发器,在DEPT表执行INSERT语句后被激发,此触发器将新部门的编号(deptno)、名称(dname)及执行此操作的用户(USER)、当时的日期(SYSDATE)插入N_DEPT表{注:此表已建好,表结构为N_DEPT(DEPTNO NUMBER(4),DNAME VARCHAR2(10), UNAME VARCHAR2(20), INDATE DATE)}。 代码: create table n_dept(deptno number(4),dname varchar2(10), uname varchar2(20),indate date); create or replace trigger del_emp after insert on dept for each row begin insert into n_dept values(:new.deptno,:new.dname,user,sysdate); end; insert into dept values(60,MMMM,hunan); 结果截图: 创建触发器CHECK_SAL,禁示对职务为CLERK的雇员的工资修改值超出1000至2000的范围,即CLERK职务员工的修改后工资值只能在1000~2000之间。要求测试该触发器。 步骤1:创建和编译触发器: 代码: Create or replace trigger check_sal Before update of sal On emp For each row Begin If (:new.sal1000 or :new.sal2000) and :old.job=CLERK then Raise_application_error(-20000,工资修改值超出1000至2000的范围,操作取消!); End if; End; 结果截图: 步骤2:在EMP表中修改记录,对触发器进行测试: 代码: Update emp set sal=800 where empno=7876; 结果截图: 编写一个管理雇员信息的包emp_mgmt。包中有成员如下: 程序结构 类型 说明 Emp_count 公有变量 跟踪员工的总人数变化,插入和删除员工时要修改该变量的值 init 公有过程 初始化包,初始化员工人数和当前个人所得税率,建议有一个输入参数p_tax,传入当前个人所得税率,暂定为工资的8%。 tax_emp 公有函数 通过员工编号计算出员工应交个人所得税款 Hire_emp 公有过程 通过员工编号插入员工 Fire_emp 公有过程 通过员工编号删除员工 emp_tax_record 记录 用于游标C_emp的RETURN(强类型游标)语句中 C_emp 游标 用于游标FOR循环中,会被过程show_emp_tax所使用 show_emp_tax 公有过程 按工资升序输出所有雇员的应交所得税清单 Exist_emp 私有函数 判断某个编号的员工是否存在,该函数会被hire_emp和fire_emp等过程调用 sal_null 异常名 工资为空值时的异常名 …… 公有或私有变量 可加入你认为需要的各种变量,但在程序中要有变量用途的注释 步骤1:创建包头和包体: -- 包头部分 执行结果: 程序包已创建。 代码: create or replace package emp_mgmt is emp_count number(5); type emp_tax_record is record(empno emp.empno%type,ename emp.ename%type,salary emp.sal%type); cursor c_emp return emp_tax_record; sal_null exception; procedure init(p_tax number); function tax_emp(v_empno emp.empno%type)return number; procedure hire_emp(v_empno emp.empno%type,v_ename emp.ename%type,v_job emp.job%type,v_sal emp.sal%type); procedure fire_emp(v_empno
显示全部
相似文档