码迷,mamicode.com
首页 > 数据库 > 详细

oracle函数创建及调用

时间:2017-07-29 16:44:27      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:tput   位置   system   混合   oracle   输入   输入参数   admin   指定   

 

创建函数的语法如下:


CREATE [OR REPLACE] FUNCTION function_name
[ (argment [ { IN | OUT | IN OUT } ] Type ,
argment [ { IN | OUT | IN OUT } ] Type ]
RETURN return_type
{ IS | AS }
<类型.变量的说明>
BEGIN
FUNCTION_body
EXCEPTION
其它语句
END;


例:

 1 CREATE OR REPLACE FUNCTION get_salary(
 2   Dept_no NUMBER, Emp_count OUT NUMBER)
 3   RETURN NUMBER 
 4   IS
 5   V_sum NUMBER;
 6 BEGIN
 7   SELECT SUM(sal), count(*) INTO V_sum, emp_count
 8   FROM emp WHERE deptno=dept_no;
 9   RETURN v_sum;
10   EXCEPTION
11     WHEN NO_DATA_FOUND THEN 
12     DBMS_OUTPUT.PUT_LINE(你需要的数据不存在!);
13     WHEN OTHERS THEN 
14     DBMS_OUTPUT.PUT_LINE(SQLCODE||---||SQLERRM);
15 END get_salary;

 

调用函数方法
函数声明时所定义的参数称为形式参数,应用程序调用时为函数传递的参数称为实际参数。应用程序在调用函数时,可以使用以下三种方法向函数传递参数:


第一种参数传递格式称为位置表示法,格式为:
例:

1 DECLARE
2   V_num NUMBER;
3   V_sum NUMBER;
4 BEGIN
5   V_sum :=get_salary(30, v_num);
6   DBMS_OUTPUT.PUT_LINE(30号部门工资总和:||v_sum||,人数:||v_num);
7 END;

 


第二种参数传递格式称为名称表示法,格式为 :
例:

1 DECLARE
2   V_num NUMBER;
3   V_sum NUMBER;
4 BEGIN
5   V_sum :=get_salary(emp_count => v_num, dept_no => 30);
6   DBMS_OUTPUT.PUT_LINE(30号部门工资总和:||v_sum||,人数:||v_num);
7 END;

 


第三种参数传递格式称为混合表示法 :
例:

 1 DECLARE 
 2   Var VARCHAR2(32);
 3 BEGIN
 4   Var := demo_fun(user1, 30, sex => );
 5   DBMS_OUTPUT.PUT_LINE(var);
 6   Var := demo_fun(user2, age => 40, sex => );
 7   DBMS_OUTPUT.PUT_LINE(var);
 8   Var := demo_fun(user3, sex => , age => 20);
 9   DBMS_OUTPUT.PUT_LINE(var);
10 END;

 


参数默认值
在CREATE OR REPLACE FUNCTION 语句中声明函数参数时可以使用DEFAULT关键字为输入参数指定默认值。
例:

 1 CREATE OR REPLACE FUNCTION demo_fun(
 2   Name VARCHAR2,vAge INTEGER,
 3   Sex VARCHAR2 DEFAULT )
 4   RETURN VARCHAR2 
 5 IS
 6   V_var VARCHAR2(32);
 7 BEGIN
 8   V_var := name||||TO_CHAR(age)||岁,||sex;
 9   RETURN v_var;
10 END; 

 


具有默认值的函数创建后,在函数调用时,如果没有为具有默认值的参数提供实际参数值,函数将使用该参数的默认值。
但当调用者为默认参数提供实际参数时,函数将使用实际参数值。
在创建函数时,只能为输入参数设置默认值,而不能为输入/输出参数设置默认值。
例:

 1 DECLARE 
 2   Var VARCHAR(32);
 3 BEGIN
 4   Var := demo_fun(user1, 30);
 5   DBMS_OUTPUT.PUT_LINE(var);
 6   Var := demo_fun(user2, age => 40);
 7   DBMS_OUTPUT.PUT_LINE(var);
 8   Var := demo_fun(user3, sex => , age => 20);
 9   DBMS_OUTPUT.PUT_LINE(var);
10 END;

 

 

 
可以使用DROP语句删除函数:
DROP FUNCTION function_name;

 

授权执行权给相关的用户或角色
GRANT语法:
GRANT system_privilege | role
TO user | role | PUBLIC [WITH ADMIN OPTION]

 

GRANT object_privilege | ALL ON schema.object
TO user | role | PUBLIC [WITH GRANT OPTION]
例:

GRANT EXECUTE ON dbms_job TO PUBLIC WITH GRANT OPTION

 


与过程相关的权限:
CREATE ANY PROCEDURE
DROP ANY PROCEDURE

与过程相关数据字典
USER_SOURCE ,USER_PROCEDURES ,USER_ERRORS

 

 

 

oracle函数创建及调用

标签:tput   位置   system   混合   oracle   输入   输入参数   admin   指定   

原文地址:http://www.cnblogs.com/-maji/p/7255908.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!