包
1.可以封装程序块(存储过程 和 函数)
2.方便调用 方便管理
3.方便程序的迁移 --生产环境
包有两部分:包的头部package:用来定义包里面内容 类似书的目录
包体package bodles
语法:
包头
create or replace package 包头名 //pk_xxx
is
变量...;
游标...;
function 函数名 (形参)return 返回类型;//声明函数
procedure 过程名(形参);//声明存储过程
end 包名;
包主体:
create or replace package body 包体名 //包头与包体名字一致
is
变量....;
游标....;
procedure 过程名(形参)
is
begin
...
end 过程名;
end;
调用包的函数用 ---调用:原来的对象怎么用,包内就怎么用
包.程序
--定义一个包 将包里面放两个程序 一个函数 一个过程
--函数:输入一个员工编号 返回薪资水平
--过程:输入一个员工编号 打印员工姓名和薪资和薪资水平
create or replace package pk_1
is
function fu1(v_empno number) return varchar2;
procedure sp_1(v_empno emp.empno%type);
end pk_1;
create or replace package body pk_1
is
function fu1(v_empno number) return varchar2
is
v_grade varchar(30);
v_dj varchar(30);
begin
select grade into v_grade from emp a left join salgrade b on a.sal between losal and hisal where empno=v_empno;
if v_grade between 1 and 2 then v_dj:='低收入';
elsif v_grade between 3 and 4 then v_dj:='中等收入';;
elsif v_grade>=5 then v_dj:='高收入';
end if;
return v_dj;
end fu1;
procedure sp_1(v_empno emp.empno%type)
is
v_ename emp.ename%type;
v_sal emp.sal%type;
v_grade salgrade.grade%type;
begin
select ename,sal,grade into v_ename,v_sal,v_grade from emp a left join salgrade b on a.sal between b.losal and hisal where empno=v_empno;
dbms_output.put_line('员工姓名'||v_ename||'薪资'||v_sal||'薪资水平'||v_grade);
end sp_1;
end pk_1;