函数:函数用于返回特定的数据,当建立函数时候,在函数头部必须包含return子句,而在函数体内必须包含return语句返回数据;我们可以用create function来建立函数;
㈠、函数案例:
㈡、在sqlplus调用函数;
㈢、在Java中调用函数:
select myfun1('SCOTT') from dual;
可以通过resultSet.getInt(1)得到返回的结果;
㈣、删除函数;
包:包用于在逻辑上组合过程和函数,他有包规范和包体两部分组成。
㈠、我们可以通过create package命令来创建包;
包的规范只包含了过程和函数的说明,但是没有过程和函数的实现代码;
㈡、包体用于实现包规范的过程和函数;我们可以通过create package body命令来创建包体;
注意:在建立包体的时候,包体的名字一定要和被实现的包的名字一样,否则会出现编译错误;
㈢、如何调用包的过程或者函数:
当调用包的过程或者函数时候,在过程和函数前面需要带上包名,如果要访问其他方案的包,还需要在包名前面加上方案名;
㈠、函数案例:
SQL> --函数案例;
SQL> --输入雇员的姓名,返回该雇员的年薪;
SQL> create or replace function myfun1(spName varchar2)
2 return number is yearSal number(7,2);
3 begin
4 --函数执行部分
5 select sal*12+nvl(comm,0)*12 into yearSal from emp where ename=spName;
6 return yearSal;
7 end;
8 /
Function created.
㈡、在sqlplus调用函数;
SQL> var income number;
SQL> call myfun1('SCOTT') into:income;
Call completed.
SQL> print income;
INCOME
----------
36000
㈢、在Java中调用函数:
select myfun1('SCOTT') from dual;
可以通过resultSet.getInt(1)得到返回的结果;
㈣、删除函数;
SQL> drop function myfun1;
Function dropped.
包:包用于在逻辑上组合过程和函数,他有包规范和包体两部分组成。
㈠、我们可以通过create package命令来创建包;
SQL> --包的创建案例;
SQL> --创建一个包myPackage;
SQL> --声明该包有一个过程和函数;
SQL> create or replace package mypackage is
2 --begin//在创建包的时候不能用begin,否则或出现编译错误;
3 procedure update_sal(name varchar2 , newSal number);
4 function annual_income(name varchar2) return number;
5 end;
6 /
Package created.
包的规范只包含了过程和函数的说明,但是没有过程和函数的实现代码;
㈡、包体用于实现包规范的过程和函数;我们可以通过create package body命令来创建包体;
SQL> --创建包体实例;
SQL> --创建一个包体mypackage ;
SQL> create or replace package body mypackage is
2 --begin//在创建包的时候不能用begin,否则或出现编译错误;
3 procedure update_sal(name varchar2 , newSal number)
4 is
5 begin
6 update emp set sal=newSal where ename=name;
7 end;
8 function annual_income(name varchar2)
9 return number is
10 annual_sal number;
11 begin
12 select sal*12+nvl(comm,0)*12 into annual_sal from emp where ename=name;
13 return annual_sal;
14 end;
15 end;
16 /
Package body created.
注意:在建立包体的时候,包体的名字一定要和被实现的包的名字一样,否则会出现编译错误;
㈢、如何调用包的过程或者函数:
当调用包的过程或者函数时候,在过程和函数前面需要带上包名,如果要访问其他方案的包,还需要在包名前面加上方案名;
SQL> call mypackage.update_sal('SCOTT',3000);
Call completed.
SQL> exec mypackage.update_sal('SCOTT',3000);
PL/SQL procedure successfully completed.