oracle函数
注意事项:
- 必须要有返回值
语法规则:
create [or replace] function 函数名(参数列表,包括:入参和出参)
return 函数值返回类型
as /is
PL/SQL主程序体
例子:带有输入参数 ,使用in关键字
--创建一个函数,输入学生学号,查出学生的排名
create or replace function queryOrder(v_stuid in varchar2)
return number
is
pm number:=0;
score number:=0;
begin
select s.grade into score from student s where s.stuid=v_stuid;
--查询出比该学生成绩大的人数,然后再加1
select count(1) into pm from student s where s.grade>score;
pm:=pm+1;
return pm;
exception
when no_data_found then
dbms_output.put_line('该学生不存在,或者该学生的成绩不存在');
end;
--函数的调用,方法1
select t.*, queryOrder ('000001') from student t where t.stuid='000001';
--函数的调用,方法2
select queryOrder ('000001') from dual;
例子:带有输入参数 ,使用out关键字
--查询某个班级的总成绩和人数
CREATE OR REPLACE
FUNCTION get_grade(
stu_classno NUMBER,
stu_count OUT NUMBER)
RETURN NUMBER
IS
v_sum NUMBER;
BEGIN
SELECT SUM(grade), count(*) INTO v_sum, stu_count
FROM student WHERE classno=stu_classno;
RETURN v_sum;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END get_grade;
DECLARE
v_num NUMBER;
v_sum NUMBER;
BEGIN
V_sum :=get_grade('001', v_num);
DBMS_OUTPUT.PUT_LINE('部门号为:001的成绩总和:'||v_sum||',人数为:'||v_num);