前奏:
必要的概念:
ORACLE 供给可以把 PL/SQL 程序存储在数据库中,并可以在任何处所来运行它。这样就叫存储过
程或函数。
进程和函数统称为 PL/SQL 子程序,他们是被命名的 PL/SQL 块,均存储在数据库中,并
通过输入、输出参数或输入/输出参数与其调用者交流信息。进程和函数的唯一区分是函数总向调
用者返回数据,而进程则不返回数据。
1:创立函数
CREATE [OR REPLACE] FUNCTION function_name
[ (argment [ { IN | IN OUT }] Type,
argment [ { IN | OUT | IN OUT } ] Type ]
[ AUTHID DEFINER | CURRENT_USER ]
RETURN return_type
{ IS | AS }
<类型.变量的解释>
BEGIN
FUNCTION_body
EXCEPTION
其它语句
END;
2:解释:
1) OR REPLACE 为可选. 有了它, 可以或创立一个新函数或调换雷同名字的函数, 而不会涌现冲突
2) 函数名后面是一个可选的参数列表, 其中包括 IN, OUT 或 IN OUT 标志. 参数之间用逗号隔开. IN 参数标志表现传递给函数的值在该函数履行中不转变OUT 标志表现一个值在函数中进行盘算并通过该参数传递给调用语句; IN OUT 标志表现传递给函数的值可以变更并传递给调用语句. 若省略标志, 则参数隐含为 IN。
3) 由于函数须要返回一个值, 所以 RETURN 包括返回成果的数据类型.
3:例题:
--存储函数构造
create function func_name(dept_id number , salary number)
return number
is
--函数应用进程中 须要声明的变量 记载类型 cursor
begin
--函数的履行体
exception
--处置函数履行进程中异常
end;
--例题1 写一个返回hellow world的function
create or replace function hello_func(temp varchar2)
return varchar2
is
begin
return "hello world"|| temp;
end;
--调用函数:
begin
dbms_output.put_line(hello_func);
end;
select hello_func("cui") from dual;
--例二 写一个返回体系时光的函数 如果函数没有形参 切勿加()
create function get_sysdate
return date
is
v_date date;
begin
v_date := sysdate;
return v_date;
end;
select get_sysdate() from dual;
--创立两个参数相加的 存储函数
create function add_func(temp_A number , temp_B number)
return number
is
temp_sum number(10);
begin
temp_sum := temp_A + temp_B;
return temp_sum;
end;
select add_func(1,1) from dual;
--定义一个函数:获得给定部门的工资总和,请求:部门号定义为参数,工资总额定义为返回值;
create function get_sal(dept_id number)
return number
is
v_sumsal number(10):=0;
cursor salary_cursor is select salary from employees where department_id = dept_id;
begin
for c in salary_cursor loop
v_sumsal := v_sumsal + c.salary;
end loop;
return v_sumsal;
end;
select get_sal(60) from dual;
--定义一个函数 获得指定部门的工资总和 和 该部门的员工总数(定义为out类型的参数)
--请求部门号定义为参数,工资总额定义为返回值
create function get_sall(dept_id number , total_count out number)
return number
is
v_sumsal number(10):=0;
cursor salary_cursor is select salary from employees where department_id = dept_id;
begin
total_count := 0;
for c in salary_cursor loop
v_sumsal := v_sumsal + c.salary;
total_count := total_count + 1;
end loop;
return v_sumsal;
end;
4:函数的调用
declare
v_num number(5):=0;
begin
dbms_output.put_line(get_sall(60,v_num));
dbms_output.put_line(v_num);
end;
前奏:
必要的概念:
ORACLE 供给可以把 PL/SQL 程序存储在数据库中,并可以