pl/sql基础知识—包

n  包

包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。

为什么需要包:使用包可以更好的管理自己写的函数、过程

①我们可以使用create package命令来创建包:

 
 

create [or replace] package 包名  is

procedure 过程名(变量名 变量类型…);

function 函数名(变量名 变量类型…) return 数据类型;

end;

包的规范只包含了过程和函数的说明,但是没有过程和函数的实现代码。包体用于实现包规范中的过程和函数。

请编写一个包,该包有一个过程,该过程可以接收用户名和新的薪水,将来用于通过用户名去更新薪水;还有一个函数,该函数可以接收一个用户名,将来要实现得到用户的年薪是多少

create
or
replace
package
mypackage1 is

procedure
pro1(v_in_ename
varchar2,v_in_newsal
number);

function
fun1(v_in_ename
varchar2)
return
number;

end;

②建立包体可以使用create
package body命令

create [or replace] package body 包名  is

create [or replace] procedure
过程名(变量名 变量类型…) is

begin

执行语句;

end;

create [or replace] function 函数名(变量名 变量类型…) return 数据类型 is

定义变量;

begin

执行语句;

end;

end;

SQL>
create or replace package body mypackage1 is


procedure pro1(v_in_ename varchar2,v_in_newsal number) is

3   
begin

4     
update emp set sal=v_in_newsal where ename=v_in_ename;

5   
end;


function fun1(v_in_ename varchar2) return number is

7   
v_annual_sal number;

8   
begin

9     
select (sal+nvl(comm,0))*13 into v_annual_sal from emp where
ename=v_in_ename;

10     
return v_annual_sal;

11   
end;

12  end;

13  /

Package
body created

③如何调用包的过程或是函数

当调用包的过程或是函数时,在过程和函数前需要带有包名,如果要访问其他方案的,还需要在包名前加方案名。

(1)控制台

 
 

exec 方案名.包名.过程名(参数值…);

call  方案名.包名.函数名(参数值…);

(2)在java中取调用包下的函数或是过程应当:

String sql="{call
scott.mypackage1.pro1(?,?)}";

String sql="select
scott.mypackage1.fun1('KING') from dual";

细节:

①包体中药实现的方法或者是过程,应先在包中声明。

上一篇:开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle


下一篇:PL/SQL重新编译包无反应