定义:
子程序的一种,与过程相似,也是数据库中存储的已经命名的PL/SQL块。
特性:
(1)必须有一个返回值
(2)函数不能单独执行,只能通过SQL语句 或者PL/SQL程序块来调用。
(3)没有输出参数
(4)不能包含INSERT,UPDATE和DELETE语句
(5)PL/SQL的特有数据类型(boolean,table,record等)
语法:
CREATE [OR REPLACE] FUNCTION function_name
[(parameter1,parameter2...)]
RETURN datatype
{IS|AS}
[local_declarations]
BEGIN
Exexutable_Statements;
[EXCEPTION
Exception_handlers;]
END;
调用:
语句调用:
SELECT function_name[(parameter1,parameter2...)] FROM DUAL; //select fun_sum(1,11) from dual;
命令行调用1:
SQL> var v_name varchar2(50)
SQL> exec :v_name:=get_stu;
PL/SQL procedure successfully completed
v_name
---------
mary
命令行调用2:
SQL> SET SERVEROUTPUT ON
SQL> exec dbms_output.put_line('当前数据库用户是:'||get_stu);
当前数据库用户是:mary
示例:
有参:
create or replace function fun_sum(a number,b number)
return number
IS
BEGIN
return a+b;
END;
无参:
create or replace function get_stu return varchar2 is
v_user varchar2(50);
begin
select name into v_user from student where id=1;
return v_user;
end get_stu;
查看数据库里面的用户创建的函数:
select object_name from user_objects where object_type='FUNCTION';
select substr(object_name,1,20) object_name,object_type from user_objects where object_type='FUNCTION';
授权:
GRANT EXECUTE ON function_name TO USER_Name; //函数的使用权授予特定的用户
GRANT EXECUTE ON function_name TO public; //函数的使用权授予数据库中所有用户
如:GRANT EXECUTE ON fun_sum to public;
删除:
DROP FUNCTION Function_name;