本教程介绍了如何使用函数的语法,并演示如何在 Oracle/PLSQL 中创建、使用和删除函数。
注:在Oracle中,函数与过程有什么不同? 函数有返回值,而过程没有返回值。
创建函数
就像在其他语言中一样,您可以在Oracle中创建自己的函数。
语法
在Oracle中创建函数的语法是:
CREATE [OR REPLACE] FUNCTION function_name
[ (parameter [,parameter]) ]
RETURN return_datatype
IS | AS
[declaration_section]
BEGIN
executable_section
[EXCEPTION
exception_section]
END [function_name];
创建过程或函数时,可以定义参数。 有三种类型的参数可以声明:
- IN - 此类型参数可以由过程或函数引用。 参数的值不能被过程或函数覆盖(类似只读)。
- OUT - 此类型参数不能由过程或函数引用,但参数的值可以被过程或函数覆盖(类似只写)。
- IN OUT - 此类型参数可以由过程或函数引用,参数的值可以被过程或函数覆盖(类似读与)。
示例
我们来看一下如何在Oracle中创建一个函数的例子。以下是Oracle函数的简单示例:
CREATE OR REPLACE Function FindCourse
( name_in IN varchar2 )
RETURN number
IS
cnumber number;
cursor c1 is
SELECT course_number
FROM courses_tbl
WHERE course_name = name_in;
BEGIN
open c1;
fetch c1 into cnumber;
if c1%notfound then
cnumber := 9999;
end if;
close c1;
RETURN cnumber;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END;
此函数称为FindCourse
。 它有一个名为name_in
的参数,它返回一个数字。 如果找到基于课程名称(course_name
)的匹配项,该函数将返回课程编号,否则返回99999
。
在上面函数定义完成后,您可以在SQL语句中引用这个函数了,如下所示:
SELECT course_name, FindCourse(course_name) AS course_id
FROM courses
WHERE subject = '数学';
删除函数
在Oracle中创建函数后,您可能会根据需要将其从数据库中删除。
语法
在Oracle中删除函数的语法是:
DROP FUNCTION function_name;
function_name
- 要删除的功能的名称。
示例
我们来看一下如何在Oracle中删除一个函数的例子。
DROP FUNCTION FindCourse;
执行上面代码后将删除FindCourse
函数。