您的位置:首页 > 其它

10.程序包

2016-07-24 22:39 211 查看
一.示例1

--一、程序包中使用子程序:存储过程和函数
--1.创建程序包头
create or replace package emp_package is
minsal emp.sal%type;
maxsal emp.sal%type;

--(1).添加雇员信息,添加的员工工资不能低于最低,不能高于最高
procedure add_emp(p_eno number,p_name varchar2,p_sal number,p_dno number) ;

--(2)通过雇员编号修改雇员工资
procedure upd_sal(p_eno number,p_sal number);

--(3).通过雇员姓名修改雇员工资
procedure upd_sal(p_name varchar2,p_sal number);

--(4).通过雇员编号查询雇员工资
function get_sal(p_eno number) return number;
end emp_package;
/

--2.创建程序包体
create or replace package body emp_package is
--(1)添加雇员信息
procedure add_emp(p_eno number,p_name varchar2,p_sal number,p_dno number)
is
begin
if p_sal between minsal and maxsal then
insert into emp(empno,ename,sal,deptno) values(p_eno,p_name,p_sal,p_dno);
else
dbms_output.put_line('工资不在范围内!');
end if;
exception
when dup_val_on_index then
dbms_output.put_line('该雇员已经存在');
end;

--(2)通过雇员编号修改雇员工资
procedure upd_sal(p_eno number,p_sal number)
is
begin
if p_sal between minsal and maxsal then
update emp set sal=p_sal where empno=p_eno;
if sql%notfound then
dbms_output.put_line('该雇员不存在');
end if;
else
dbms_output.put_line('工资不在范围内');
end if;
end;

--(3).通过雇员姓名修改雇员工资
procedure upd_sal(p_name varchar2,p_sal number)
is
begin
if p_sal between minsal and maxsal then
update emp set sal=p_sal where ename=p_name;
if sql%notfound then
dbms_output.put_line('该雇员不存在');
end if;
else
dbms_output.put_line('工资不在范围内');
end if;
end;

--(4).通过雇员编号查询雇员工资
function get_sal(p_eno number) return number
is
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=p_eno;
return v_sal;
exception
when no_data_found then
dbms_output.put_line('该雇员不在');
end;

begin
select min(sal),max(sal) into minsal,maxsal  from emp;
end emp_package;
/

--3.调用程序包中子程序
--(1)调用添加雇员信息
set serverout on
begin
emp_package.add_emp(5000,'mary',300,20);
dbms_output.put_line('添加成功');
commit;
end;
/

--(2)通过雇员编号查询雇员信息
set serverout on
declare
v_sal emp.sal%type;
begin
v_sal:=emp_package.get_sal(1111);
dbms_output.put_line('7369的雇员工资为:'||v_sal);
end;
/

--二、程序包中的游标使用
--1.创建程序包包头
create or replace package emp_cursorPack is
type type_emp_cursor is ref cursor;
end emp_cursorPack;
/

--2.创建存储过程并且游标作为输出参数
create or replace  procedure proc_emp(cur out emp_cursorPack.type_emp_cursor) as
begin
open cur for
select empno,sal from emp;
end proc_emp;
/

--3.调用存储过程提取返回的游标内容
set serverout on
declare
--定义员工编号
v_empno emp.empno%type;

--定义员工工资
v_sal emp.sal%type;

--定义游标类型的变量
emp_sal emp_cursorPack.type_emp_cursor;
begin
--调用存储过程,并将一堆数据存放在游标变量中
proc_emp(emp_sal);

--循环提取游标内容
loop
fetch emp_sal into v_empno,v_sal;
exit when emp_sal%notfound;
dbms_output.put_line(v_empno||'的薪水是'||v_sal);
end loop;
close emp_sal;
end;
/


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