目录
(1)IN模式:表示该参数是输入给函数的参数,也就是说在函数中不能再改IN模式的参数进行赋值了。
(2)OUT模式:表示该参数在函数中被赋值,并可以传给函数调用程序(也就是在函数可以被重新的赋值)。
(3)IN OUT模式:表示该参数既可以传值也可以被赋值。
CREATE [OR REPLACE] FUNCTION <函数名>
(
<参数名1>,<参数模式><数据类型>
<参数名2>,<参数模式><数据类型>
……
)
RETURN <返回值类型>
{IS | AS}
[声明变量]
BEGIN
<函数体>
[RETURN (<返回表达式>);]
END [<函数名>];
提示:使用OR REPLACE表示当前的函数会覆盖之前同名的函数。
CREATE OR REPLACE FUNCTION 函数名
(
in_pmt IN char,
out_pmt OUT char,
in_out_pmt IN OUT char
)
RETURN char
AS
return_char char
BEGIN
<函数体>
[RETURN (return_char);
END [<函数名>];
--要求返回所有学生最高学分的分数。
函数定义:
create function demofun2(
num IN char
)
return char
AS
reScore number;
BEGIN
select max(score) into reScore
from xsb;
return (reScore);
END;
<变量名>:=<函数名>[(<实参1>,<实参2>,...)]
提示:变量名是用来接收函数返回值的。
SET SERVEROUTPUT ON;
DECLARE
getScore number;
BEGIN
getScore:=demofun2(1);
DBMS_OUTPUT.PUT_LINE('最高学分: '||to_char(getScore));
END;注:其实我这里还没有使用传递的参数。
例子2:返回女生中的最高学分。
create function demofun3(
getsex IN char
)
return number
AS
reScore number;
BEGIN
select max(score) into reScore
from xsb
where sex=getsex;
return (reScore);
END;
SET SERVEROUTPUT ON;
DECLARE
getScore number;
BEGIN
getScore:=demofun3('女');
DBMS_OUTPUT.PUT_LINE('最高学分: '||to_char(getScore));
END;
DROP FUNCTION [<用户方案名>.] <函数名>
例如:drop function demofun3;