oracle(3)pl/sql编程基础存储过程、函数、包、触发器(二)
n
--执行部分
select sal*12+nvl(comm,0)*12 into yearSal from emp where ename=spName;
return yearSal;
end;
在sqlplus中调用函数
sql> var abc number
sql> call sp_fun2('SCOTT') into:abc;
sql> print abc;
在java程序中调用该函数
select annual.income("SCOTT") from dual;
可以通过rs.getInt(1)得到返回的结果
包
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。
a.可以使用create package 命令来创建包:
实例: www.2cto.com
--创建包
--创建一个包sp_package
--声明该包有一个过程update_sal
--声明该包有一个函数annual_income
create package sp_package is
procedure update_sal(name varchar2,newsal number);
function annual_income(name varchar2) return number;
end;
包的规范只包含了过程和函数的说明,但是没有过程和函数的实现代码。
包体用于实现包规范中的过程和函数,
b.建立包体可以使用create package body 命令
create or replace package body sp_package is
procedure update_sal(name varchar2,newsal number);
is
begin
update emp set sal=newsal where ename=name;
end;
function annual_income(name varchar2)
return number is
annual_salary number;
begin www.2cto.com
select sal*12+nvl(comm,0) into annual_salary from emp
where ename=name;
return annual_salary;
end;
end;
c.如何调用包的过程或是函数
当调用包的过程或是函数时,在过程和函数前需要带有包名,如果要
访问其他方案的包,还需要在包名前加方案名。
sql>call sp_package.update_sal('SCOTT',1500);
触发器
触发器是指隐含的执行的存储过程。当定义触发器时,必须要指定除非的事件和触发的操作,
常用的触发事件包括insert,update,delete语句,而触发操作实际上就是一个pl/sql
块。可以使用create trigger 来建立触发器。
作者 kyle8525_nsn