Oracle实验6下触发器和包.doc
文本预览下载声明
《数据库开发技术》实验_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
显示全部