函数用于返回特定数据。执行时得找一个变量接收函数的返回值;
语法如下:
无参:
- create or replace function 函数名 return 返回类型 is Result 数据类型;
- --变量声明
- begin
- --其它语句;
- return(Result);
- end 函数名;
注意:Result ——结果集缓存(Result Cache)可要可不要,它是11g的一个新特性,含义就是将查询的结果集Cache起来,以便随后相同的查询请求可以直接利用,从而避免了再次查询。
例:
- create or replace function get_user return varchar2 is
- Result varchar2(50);
- begin
- select username into re from user_users;
- return(Result );
- end get_user;
有参:
- create or replace function 函数名 ( argu1 [mode1] datatype1, argu2 [mode2] datatype2, ........ ) return 返回数据类型 is
- begin
- end 函数名;
- --model 指参数的模式 如in(输入) out(输出)
例:带in参数
- create or replace function myfun(deptno in number) return number is
- Result number;
- num number := 0;
- begin
- Result :=0;
- select count(*) into num from emp t where t.deptno=deptno;
- Result := num;
- return (Result);
- end myfun;
例:带out参数
- create or replace function get_info(e_name varchar2,job out varchar2) return number is
- Result number;
- begin
- select sal,job into Result,job from emp where ename=e_name;
- return(Result);
- end get_info;
例:带in out 参数
- create or replace function result(num1 number,num2 in out number) return number is
- v_result number(6);
- v_remainder number;
- begin
- v_result :=num1/num2;
- v_remainder :=mod(num1,num2);
- num2 :=v_remainder;
- return(v_result);
- Exception
- when zero_divide then
- raise_application_error(-20000,'不能除0');
- end result;
- 1 、一个最简单的自定义函数Fun_test1的定义。
- create or replace function Fun_test1(p_1 number)--Fun_test1是函数名,有一个输入参数p_1,是number型的。返回值也是number型的
- return number
- IS
- begin
- if p_1>0 then
- return 1;
- elsif p_1=0 then
- return 0;
- else
- return -1;
- end if;
- end;
- --这个函数只是可以知道自定义函数的定义和格式。其实没什么用途。
--自定义函数的调用方法和Oracle的其它内部函数是一样的。
- 附:
- 函数调用限制
- 1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数
- 2、SQL只能调用带有输入参数,不能带有输出,输入输出函数
- 3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)
- 4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句
本文转自 wbb827 51CTO博客,原文链接:http://blog.51cto.com/wbb827/1175634