函数是命名了的、存储在数据库中的PL/SQL程序块。函数接受零个或多个输入参数,有一个返回值,返回值的数据类型在创建函数时定义。定义函数的语法如下:
parameter(参数)FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers]
END [name] 这个是教程上说的,不是很懂,能不能解释一下红色标记部分的符号,顺便给个例子,谢谢了!
看这个教程,好像可以传递多个参数阿,只要参数类型一样就行了阿?
parameter(参数)FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers]
END [name] 这个是教程上说的,不是很懂,能不能解释一下红色标记部分的符号,顺便给个例子,谢谢了!
看这个教程,好像可以传递多个参数阿,只要参数类型一样就行了阿?
create or replace function a(arg1 in number,arg2 in number) return number is
begin
return(arg1+arg2);
end a;1、datatypes 是数据类型 number,varchar等都是数据类型。
2、参数的个数与类型是自定义的
BEGIN
RETURN power(p1,2)+power(p2,2);
END;
/select get_sum_sqrt(1,4) from dual;另外一个例子,从emp表中利用empno取得工资额
CREATE OR REPLACE FUNCTION get_sal(p_empno NUMBER) RETURN NUMBER IS
v_sal NUMBER(4);
BEGIN
SELECT sal
INTO v_sal
FROM emp
WHERE empno = p_empno;
RETURN v_sal;
EXCEPTION WHEN NO_DATA_FOUND THEN --没有p_empno对应的人,则返回0
RETURN 0;
WHEN OTHERS THEN --出现其他异常,返回-1
RETURN -1;
END;
/
return varchars(10)
is
gname varchar(10);
begin
select name in to gname from test
where id=id;
return name;
endselect get_name(id) from dual
return varchars(10)
is
gname varchar(10);
begin
select name into gname from test
where id=id;
return gname;
endselect get_name(id) from dual
RETURN BOOLEAN
IS
val NUMBER;
BEGIN
val := TO_NUMBER (NVL (parmin, 'a'));
RETURN TRUE;
EXCEPTION
WHEN OTHERS
THEN
RETURN FALSE;
END;
利用系统函数TO_NUMBER定义判断字符对象是否可转为数值型的函数 EXCEPTION定义了异常,返回假。
FUNCTION GET_MODULE_AVERAGE 出现错误:LINE/COL ERROR
2/36 PLS-00103: 出现符号 ")"在需要下列之一时: := . ) , @ % default character 符号 ")在 ")" 继续之前已插入。
create or replace function get_module_average (
cwMarkavg number ,ExMarkavg number)
return number is v_sal number(4);
begin
select module.avg(cw),module.avg(exam)
into v_sal
from registration
where module.avg(cw)=cwMarkavg
and module.avg(exam)=ExMarkavg
and m.moduletitle='Introduction to Painting'
and r.semester='1'
and r.year='05';
return v_sal;
exception when no_data_found then
return 0;
when others then
return -1;
end;
CREATE OR REPLACE FUNCTION FUN_IS_NULL(STRVALUE IN STRING) RETURN STRING IS
RESULT STRING(1);
BEGIN
IF STRVALUE IS NULL THEN
RESULT := 'Y';
ELSE
RESULT := 'N';
END IF;
RETURN(RESULT);
END FUN_IS_NULL;
以上例子是判断是不是空,如果是空,则返回Y,否则返回N,这里只是据个例子,oracle是自带一个nvl函数的
into v_sal
from registration
where module.avg(cw)=cwMarkavg
and module.avg(exam)=ExMarkavg
and m.moduletitle='Introduction to Painting'
and r.semester='1'
and r.year='05'; 你select两个字段,返回进一个变量
计算方程是v_sal=cwMarkavg/(cwWeight*0.01)+ExMarkavg/(ExamWeight*0.01)
FUNCTION GET_MODULE_AVERAGE 出现错误:LINE/COL ERROR
2/15 PLS-00103: 出现符号 ")"在需要下列之一时: := . ) , @ % default character 符号 ")在 ")" 继续之前已插入。 create or replace function get_module_average (
avgttl number)
return number is v_sal number(4);
begin
select a.avgcw*b.cwweight*0.01 + a.avgexam*b.examweight*0.01 avgttl
from (select year,
semester,
moduleid,
avg(cw) avgcw,
avg(exam) avgexam
from Registration
group by year, semester, moduleid) a,
module b
where a.moduleid = b.moduleid
and b.moduletitle='Introduction to Painting'
and a.semester='1'
and a.year='05';
return v_sal;
exception when no_data_found then
return 0;
when others then
return -1;
end;