oracle 进阶(三) 函数的使用

函数

函数相当于 Java 中的有返回值函数,可以被其它模块反复调用,在调用的时候, 可以被作为表达式的一部分。必须要有返回值。这个返回值既可以是 number 或 varchar2 这样简单的数据类型,也可以是 PL/SQL 数组或对象这样复杂的数据类型。函数会在数据库中一直保留,直到被删除。

1、语法结构

CREATE [OR REPLACE] FUNCTION function_name
[arg1 [IN|OUT|IN OUT]] arg_type1,
[arg2 [IN|OUT|IN OUT]] arg_type2,
……
RETURN return_type
IS|AS
声明部分
BEGIN
执行部分
EXCEPTION
异常处理部分
END function_name;

说明:
RETURN 子句说明函数返回值的数据类型。
这是与过程的区别之一。
OR RELACE 是可选的。
如果省略,则创建时不允许数据库中有同名的函数;
如果使用,则会先删除同名的函数,然后创建新的函数。
arg1,arg2,…,argn 是函数的形参的名称,是可选的。
arg_type1, arg_type2,…,arg_typen 是对应的形参的数据类型,参数类型可以是基本的数据类型,也可以是 %type 或 %rowtype 匹配的数据类型,不能使用空值 null。
注意:此处的数据类型后面不能带参数,
即精度、范围等,如 NUMBER(12,2)只能写成 NUMBER,varchar2(20),只能写成 varchar2。
IN|OUT|IN OUT 是形参的模式。如果省略则为 IN 模式。
IN
用于接受调用程序的值 默认的参数模式
OUT
用于向调用程序返回值
IN OUT
用于接受调用程序的值,并向调用程序返回更新的值

2、示例

无参函数:

--创建函数,无参函数名后不要加括号
create or replace function func_first
       return emp.ename%type
is
  v_name emp.ename%type;
begin
     select ename into v_name from emp where empno=7369;
     return v_name;
end func_first;

有参数函数:

--创建函数
create or replace function func_find(
       v_eno emp.empno%type
)
       return number
is
  v_ysal emp.sal%type;
begin
     select nvl(sal,0)*12+nvl(comm,0) into v_ysal from emp where empno=v_eno;
     return v_ysal;
end func_find;

3、执行

函数不能单独执行,在调用的时候, 只能作为表达式的一部分执行

--执行无参函数
declare
       v_esal emp.sal%type;
       v_name emp.ename%type;
begin
    proc_find(func_first(),v_name,v_esal);
     dbms_output.put_line(func_first()||v_name||'--'||v_esal);
     v_name:=func_first();
     dbms_output.put_line(v_name);
end;
--执行有参函数
declare
begin
     dbms_output.put_line(func_find(7369));
end;

4、删除

语法

DROP FUNCTION function_name;

其中,function_name 是函数的名称。

--删除函数
drop function func_first;

上一篇 oracle 进阶(二)存储过程的使用
目录
下一篇 oracle 进阶(四)游标的使用