您的位置:首页 > 数据库 > Oracle

Oracle笔记 十三、PL/SQL面向对象之package

2015-10-12 22:20 495 查看
--将方法和过程用包定义

createorreplacepackagepkg_emp

as

--输入员工编号查询出员工信息

procedurepro_findInfo(

in_empnoemp2.empno%type,

out_nameoutemp2.ename%type,

out_saloutemp2.sal%type

);

--根据部门编号修改本部门员工工资

procedurepro_editInfo(

in_emp_recordemp2%rowtype,

out_flagoutboolean

);

--输入新员工信息并保存到数据库

procedurepro_addInfo(

in_emp_new_recordemp2%rowtype

);

--统计工资信息

functionfun_sum(

num_anumber,

num_bnumber

)returnnumber;

endpkg_emp;


--实现包

createorreplacepackagebodypkg_emp

as

--输入员工编号查询出员工信息

procedurepro_findInfo(

in_empnoemp2.empno%type,

out_nameoutemp2.ename%type,

out_saloutemp2.sal%type

)

as

begin

selectename,salintoout_name,out_salfromemp2whereempno=in_empno;

endpro_findInfo;


--根据部门编号修改本部门员工工资

procedurepro_editInfo(

in_emp_recordemp2%rowtype,

out_flagoutboolean

)

is

begin

updateemp2setsal=in_emp_record.salwheredeptno=in_emp_record.deptno;

out_flag:=true;

/*exception

whenno_data_foundthen

out_flag:=false;

commit;*/

if(sql%rowcount<1)then

out_flag:=false;

else

out_flag:=true;

commit;

endif;

endpro_editInfo;


--输入新员工信息并保存到数据库

procedurepro_addInfo(

in_emp_new_recordemp2%rowtype

)

as

temp_sqlvarchar2(200);

begin

temp_sql:='insertintoemp2(empno,ename,sal,comm,deptno)values(:1,:2,:3,:4,:5)';

executeimmediatetemp_sqlusingin_emp_new_record.empno,in_emp_new_record.ename,

in_emp_new_record.sal,in_emp_new_record.comm,in_emp_new_record.deptno;

commit;

end;


--统计工资信息

functionfun_sum(

num_anumber,

num_bnumber

)returnnumber

is

begin

returnnum_a+num_b;

endfun_sum;

endpkg_emp;



--测试1

declare

out_nameemp2.ename%type;

out_salemp2.sal%type;

begin

pkg_emp.pro_findInfo(7369,out_name,out_sal);

dbms_output.put_line(out_name);

dbms_output.put_line(out_sal);

end;


--测试2

select*fromemp2;

declare

in_emp_recordemp2%rowtype;

flagboolean;

begin

in_emp_record.deptno:=&部门编号;

in_emp_record.sal:=&员工工资;

pkg_emp.pro_editInfo(in_emp_record,flag);

if(flag=false)then

dbms_output.put_line('no');

else

dbms_output.put_line('yes');

endif;

end;


--测试3

declare

new_emp_recordemp2%rowtype;

begin

new_emp_record.empno:=&员工编号;

new_emp_record.ename:=&姓名;

new_emp_record.sal:=&工资;

new_emp_record.comm:=&奖金;

new_emp_record.deptno:=&部门编号;

pkg_emp.pro_addInfo(new_emp_record);

end;


--测试4

declare

sum_empnumber;

begin

selectpkg_emp.fun_sum(sal,nvl(comm,0))intosum_empfromemp2

whereempno=&员工编号;

dbms_output.put_line('员工总工资:'||sum_emp);

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: