【Oracle 自定义函数】

本文详细介绍了在Oracle中创建自定义函数的过程,包括求和函数、根据员工编号获取姓名和部门平均工资的函数实例,以及不同调用方式和参数传递方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


语法

提示:Oracle 自定义函数语法如下:

    CREATE OR REPLACE FUNCTION 函数名(参数1[IN] 数据类型,参数2 [IN]数据类型……)
    RETURN 返回的数据类型  --不要带精度

    IS|AS ---IS 或者 AS 随便写一个都可以
       声明变量
    BEGIN
       函数的具体逻辑; 
    RETURN 声明变量;--里面必须要有一个RETURN子句
    ---异常处理
     EXCEPTION WHEN OTHERS THEN 
        ROLLBACK;---如果涉及到了对数据的 增 删 改
       DBMS_OUTPUT.put_line(SQLERRM); --将报错信息打印
    END;
  • 参数的命名规则入参 是以 P_ 开头。
  • 编译就是将写好的代码放在数据库里某个文件里存着,调用函数的时候,就会到数据库里执行存放的函数逻辑。

一、创建自定义 求和函数

步骤一:创建函数

示例:计算数字 1-N 的N项和。

create or replace function fun_sum(P_N number)
return number  --声明返回数据类型
is --as
s number:=0; --声明变量
begin
  for i in 1..N loop
    s:=s+i;
  end loop;
return s;  --返回所声明的变量

exception     --异常处理,出错则事务回滚
  when others then
    rollback;
end;

在这里插入图片描述

步骤二:函数调用

1. 用select 语句调用

语法:select 函数名(参数) from dual;

a 传参方式一:
参数直传
select fun_sum(100) from dual;
b 传参方式二:
使用 => 方式对参数进行赋值
select fun_sum(P_N=>100) from dual;
c 传参方式三:
通过弹窗的方式,动态输入参数值
select fun_sum(P_N=>&数字) from dual;

在这里插入图片描述

2. 用匿名块方式调用

declare  --声明部分
s number; --声明变量用以保存函数返回值
begin
  s:=fun_sum(100);
  dbms_output.put_line(s);  --变量方式保存
  dbms_output.put_line(fun_sum(100)); --直接调用输出
end;

二、创建一个自定义函数,输入员工编号,返回员工姓名

步骤一:创建函数

create or replace function select_ename(p_empno number)
return varchar2  --声明返回数据类型
is --as
emp_name varchar2(30);
begin
  select ename into emp_name from emp where empno = p_empno;
return emp_name;

exception     --异常处理,出错则事务回滚
  when others then
    rollback;
end;

步骤二:调用函数

--调用方式1
select select_ename(7499) from dual;
select select_ename(p_empno=>&员工编号) from dual;
--调用方式2
begin
  dbms_output.put_line('员工姓名: '||select_ename(&员工编号));
end;

三、创建一个函数,功能是根据传来的员工编号,返回这个员工所在部门的平均工资

步骤一:创建函数

create or replace function fun_dept_avg(p_empno number)
return varchar2  --声明返回数据类型
is --as
dept_avg number;
begin
  select round(avg(sal),2) into dept_avg from emp
  where deptno = (select deptno from emp where empno = p_empno);
return dept_avg;

exception  --异常处理,出错则事务回滚
  when others then
    rollback;
end;

步骤二:调用函数

--调用方式1
select fun_dept_avg(7499) from dual;
select fun_dept_avg(p_empno=>&员工编号) from dual;
--调用方式2
begin
  dbms_output.put_line('员工姓名: '||fun_dept_avg(&员工编号));
end;
### Oracle 数据库自定义函数创建与使用 在 Oracle 数据库中,自定义函数是一种非常强大的工具,可以用来封装逻辑、提高代码复用性以及解决跨数据库兼容性问题。以下是关于如何创建和使用自定义函数的详细说明。 #### 创建存储函数 创建存储函数的基本语法如下: ```sql CREATE [OR REPLACE] FUNCTION 函数名 (参数列表) RETURN 函数值类型 AS -- 定义局部变量 BEGIN -- 函数体逻辑 RETURN 返回值; END; ``` - `CREATE OR REPLACE`:如果函数已经存在,则替换它。 - 参数列表:可以包含零个或多个参数,每个参数都有名称、模式(IN、OUT 或 IN OUT)和数据类型。 - `RETURN`:指定函数返回的数据类型。 #### 示例 1:无参函数 以下是一个简单的无参函数示例,用于返回当前日期[^3]: ```sql CREATE OR REPLACE FUNCTION get_current_date RETURN DATE AS BEGIN RETURN SYSDATE; END; ``` 调用该函数的方式如下: ```sql SELECT get_current_date FROM DUAL; ``` #### 示例 2:带参函数 以下是一个带参函数示例,用于统计某个部门的员工人数[^4]: ```sql CREATE OR REPLACE FUNCTION depA2(dep VARCHAR2) RETURN NUMBER AS result NUMBER; BEGIN SELECT COUNT(e.deptno) INTO result FROM SCOTT.dept d LEFT JOIN SCOTT.emp e ON d.deptno = e.deptno WHERE d.dname = dep; RETURN result; END; ``` 调用该函数时,可以传递部门名称作为参数: ```sql SELECT depA2('SALES') FROM DUAL; ``` #### 示例 3:外部函数 Oracle 支持通过外部函数调用 C/C++ 编写的动态链接库。例如,假设有一个名为 `mylib.so` 的动态链接库,其中包含一个函数 `add_numbers`,可以通过以下方式注册并调用它[^2]: ```sql CREATE LIBRARY mylib AS '/path/to/mylib.so'; CREATE OR REPLACE FUNCTION add_numbers(a NUMBER, b NUMBER) RETURN NUMBER AS EXTERNAL NAME 'add_numbers' LIBRARY mylib LANGUAGE C PARAMETERS (a BY VALUE, b BY VALUE); ``` 调用此函数的方式如下: ```sql SELECT add_numbers(5, 3) FROM DUAL; ``` #### 注意事项 - 自定义函数必须包含 `RETURN` 子句,用于返回函数值[^3]。 - 如果函数需要处理复杂逻辑,可以结合 PL/SQL 块实现。 - 在编写函数时,应考虑性能优化,避免不必要的查询或循环操作。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值