oracle存储函数
*Oracle存储函数*
*存储函数:*实际上是一段封装在oracle服务器中的一段plsql代码片段,他是已经编译好了的代码片段。
*语法:*
Create [or replace] function 函数名称(参数名称 in|out 参数类型,参数名称 in|out 参数类型,...)
Return 结果变量数据类型
Is
变量声明部分;
Begin
逻辑部分;
Return 结果变量;
[exception 异常处理部分]
End;
注意:end后面的;不能取消掉。参数列表里面默认是输入类型 in
*存储过程和存储函数的区别:*
\1. 他们本质上没有区别
\2. 存储函数存在的意义是给存储过程调用的 当然存储过程里面也能够调用存储函数,存储函数也能够调用存储函数,存储过程里面也能够调用存储过程。
\3. 函数可以在SQL语句里面直接调用,而存储过程不可以
\4. 存储过程能实现的,存储函数也能够实现,存储函数能实现的,存储过程也能实现
*案例:查询指定员工的年薪*
create or replace function func_getsal(vempno in number) return number
is
**--声明变量,保存年薪**
vtotalsal number;
begin
SELECT a.sal*12+nvl(comm,0) into vtotalsal FROM emp a WHERE a.empno=vempno;
return vtotalsal;
end;
编译
执行存储函数:
**-- Created on 2020/12/16 by ZHAOYONGQIANG**
declare
v_sal number;
begin
**-- Test statements here**
v_sal:= func_getsal(7788);
dbms_output.put_line(v_sal);
end;
执行结果:
36000
案例:
--查询指定员工的姓名和年薪
select a.ename,func_getsal(7788) from emp a WHERE a.empno='7788';
*Java调用oracle存储函数:*
package com.zyq.oracle;
import oracle.jdbc.OracleTypes;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 调用oracle存储函数
*/
public class JdbcTest_Function {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.获取数据库连接对象
String url="jdbc:oracle:thin:@localhost:1521:orcl";
String user="scott";
String password="tiger";
Connection connection = DriverManager.getConnection(url, user, password);
//3.获得语句对象
String sql="{?=call func_getsal(?)}";
CallableStatement call = connection.prepareCall(sql);
//4.设置输出参数
call.registerOutParameter(1,OracleTypes.NUMBER);
//5.设置输入参数
call.setInt(2,7839);
//6.执行存储函数
call.execute();
//7.获取输出参数
double sal = call.getDouble(1);
System.out.println(sal);
//8.释放资源
call.close();
connection.close();
}
}
执行结果:60000.0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2020-01-10 oracle数据库-查询一张表中某个字段按照降序排列的前十条数据
2020-01-10 SQL语句-查询特定年份产生的数据
2020-01-10 SQL语句-查询一张表中某个字段存在相同值的数据