Oracle关于包package

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;

你可能感兴趣的:(oracle)