函数用于返回特定的数据,当建立函数时,在函数头部必须包含 return 子句。
而在函数体内必须包含 return 语句返回的数据。我们可以使用 create function
来建立函数,实际案例:
Sql 代码
1. --输入雇员的姓名,返回该雇员的年薪
2. create function annual_incomec(name varchar2)
3. return number is
4. annual_salazy number(7,2);
5. begin
6. --执行部分
7. select sal*12+nvl(comm, 0) into annual_salazy from emp wher
e ename=name;
8. return annual_salazy;
9. end;
10./
如果函数创建过程有编译错误,可以使用show error;命令显示错误
在 sqlplus 中调用函数
Sql 代码
1. SQL> var income number
2. SQL> call annual_incomec('scott') into: income;
3. SQL> print income
包ν
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。
1.我们可以使用 create package 命令来创建包。
实例:
--创建一个包 sp_package
--声明该包有一个过程 update_sal
--声明该包有一个函数annual_income
Sql 代码
1. create package sp_package is
2. procedure update_sal(name varchar2, newsal number);
3. function annual_income(name varchar2) return number;
4. end;
包的规范只包含了过程和函数的说明,但是没 过程和函数的实现代码。包体
用于实现包规范中的过程和函数。
2.建立包体可以使用 create package body 命令
--给包 sp_package 实现包体
Sql 代码
1. create or replace package body sp_package is
2. procedure update_sal(name varchar2, newsal number)
3. is
4. begin
5. update emp set sal = newsal where ename = name;
6. end;
7. function annual_income(name varchar2) return number is
8. annual_salary number;
9. begin
10. select sal * 12 + nvl(comm, 0) into annual_salary from emp
11. where ename = name;
12. return annual_salary;
13. end;
14.end;
15./
3.如何调用包的过程或是函数
----------------------- Page 73-----------------------
当调用包的过程或是函数时,在过程和函数前需要带 包名,如果要访问其它方
案的包,还需要在包名前加方案名。
如:
SQL> call sp_package.update_sal('SCOTT', 1500);
特别说明:
包是pl/sql 中非常重要的部分,我们在使用过程分页时,将会再次体验它的威
力呵呵。