jdbc oracle 函数,Oracle系列:(33)JDBC访问Oracle的存储过程和存储函数
1、存储过程
1.1、准备SQL-- 定义存储过程
create or replace procedure get_rax(salary in number,rax out number)
as
--需要交税的钱
bal number;
begin
bal := salary - 3500;
if bal<=1500 then
rax := bal * 0.03 - 0;
elsif bal<=4500 then
rax := bal * 0.1 - 105;
elsif bal<=9000 then
rax := bal * 0.2 - 555;
elsif bal<=35000 then
rax := bal * 0.25 - 1005;
elsif bal<=55000 then
rax := bal * 0.3 - 2755;
elsif bal<=80000 then
rax := bal * 0.35 - 5505;
else
rax := bal * 0.45 - 13505;
end if;
end;
/
set serveroutput on;
-- 调用存储过程
declare
sal number := &salary;
rax number;
begin
get_rax(sal,rax);
dbms_output.put_line(sal || '元工资应该交税' || rax || '元');
end;
/
1.2、准备JAR包oracleojdbc5.jar
c3p0c3p0-0.9.1.2.jar
c3p0-config.xml
c3p0-config.xml
jdbc:oracle:thin:@127.0.0.1:1521:orcl
oracle.jdbc.driver.OracleDriver
scott
tiger
3
6
1000
1.3、编写工具类
JDBCUtils.javapackage com.rk.utils;
import java.sql.Connection;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JDBCUtils {
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
public static Connection getConnection() throws Exception{
return dataSource.getConnection();
}
public static void closeQuietly(AutoCloseable ac){
if(ac != null){
try {
ac.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
1.4、JDBC程序调用存储过程
CallProc.javapackage com.rk.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types;
import com.rk.utils.JDBCUtils;
/**
* 演示java-jdbc调用oracle过程
*/
public class CallProc {
public static void main(String[] args) throws Exception{
String sql = "{call get_rax(?,?)}";
Connection conn = JDBCUtils.getConnection();
CallableStatement cstmt = conn.prepareCall(sql);
//为第一个?号设置值,从1开始
cstmt.setInt(1, 7000);
//为第二个?注册输出类型
cstmt.registerOutParameter(2, Types.INTEGER);
//执行调用过程
cstmt.execute();
//接收过程的返回值,即第二个?号
int rax = cstmt.getInt(2);
//显示
System.out.println("7000元工资应该交税"+rax+"元");
JDBCUtils.closeQuietly(cstmt);
JDBCUtils.closeQuietly(conn);
}
}
2、存储函数
2.1、准备SQL--定义函数
create or replace function findEmpNameAndJobAndSal(pempno in number,pjob out varchar2,psal out number)
return varchar2
as
pename emp.ename%type;
begin
select ename,job,sal into pename,pjob,psal from emp where empno = pempno;
return pename;
end;
/
--调用函数
declare
pename emp.ename%type;
pjob emp.job%type;
psal emp.sal%type;
begin
pename := findEmpNameAndJobAndSal(7788,pjob,psal);
dbms_output.put_line('7788'||'--'||pename||'--'||pjob||'--'||psal);
end;
/
2.2、JDBC程序调用存储函数package com.rk.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types;
import com.rk.utils.JDBCUtils;
/**
* 演示java-jdbc调用oracle函数
*/
public class CallFunc {
public static void main(String[] args) throws Exception {
String sql = "{? = call findEmpNameAndJobAndSal(?,?,?)}";
Connection conn = JDBCUtils.getConnection();
CallableStatement cstmt = conn.prepareCall(sql);
//为第一个?注册输出类型
cstmt.registerOutParameter(1, Types.VARCHAR);
//为第二个?注入值
cstmt.setInt(2, 7788);
//为第三个?注册输出类型
cstmt.registerOutParameter(3, Types.VARCHAR);
//为第四个?注册输出类型
cstmt.registerOutParameter(4, Types.INTEGER);
//执行函数调用
cstmt.execute();
//分别获取1,3,4占位符的值
String ename = cstmt.getString(1);
String job = cstmt.getString(3);
int sal = cstmt.getInt(4);
//显示
System.out.println("7788--"+ename+"--"+job+"--"+sal);
JDBCUtils.closeQuietly(cstmt);
JDBCUtils.closeQuietly(conn);
}
}
jdbc oracle 函数,Oracle系列:(33)JDBC访问Oracle的存储过程和存储函数相关推荐
- oracle 查看函数被哪些触发器引用_oracle如何查看存储过程,存储函数,触发器的具体内容...
(1)set serveroutput on 实现plsql developer 打印输出 (2)如何查看存储过程,存储函数,触发器的内容 查 user_sources表 eg:查询GET_DEPT_ ...
- oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门
文章思维导图 一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数.复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数 ...
- 编程开发之--Oracle数据库--存储过程和存储函数(2)
上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在java程序中如何调用我们创建的存储过程和存储函数 1.在应用程序中调用我们的存储过程 创建一个简单的Ja ...
- oracle as 不可以省略,Oracle:存储过程,存储函数
什么是存储过程和存储函数:指存储在数据库中供所有用户程序调用的子程序叫做存储过程.存储函数. 这个子程序是用PL/SQL写的.可以用Java程序调用,就是完成特定功能的子程序. 用create pro ...
- java 执行oracle 存储过程_oracle--在java中调用存储过程和存储函数
在java中调用存储过程和存储函数 存储过程: 查询某个员工的姓名 月薪 职位: create or replace procedure queryempinfo(eno in number, pen ...
- JDBC使用总结:增删改查、调用存储过程、执行存储函数、存储过程与存储函数区别分析
JDBC(Java Database Connectivity):Java访问数据库的解决方案. JDBC只定义接口,具体实现由各个数据库厂商负责. 原生jdbc技术的使用基本都是模板式的开发,基本格 ...
- Oracle存储过程和存储函数创建
select * from emp; -----------------存储过程------------------------ --定义create[or replace] procedure 存储 ...
- Oracle的存储过程和存储函数
存储过程和存储函数:指存储在数据库中供所有用户程序调用的子程序叫做存储过程.存储函数. 他们也是数据库的对象,类似于表.视图.索引.序列.同义词等. 存储函数可以用return返回值,而存储过程不可以 ...
- 【宋红康 MySQL数据库】【基础版】【15】存储过程与存储函数
文章目录 存储过程与存储函数 定义存储过程与存储函数 对比存储函数和存储过程 存储过程概述 理解 分类 创建存储过程 语法分析 代码举例 调用存储过程 调用格式 代码举例 如何调试 存储函数的使用 语 ...
- 15_MySQL存储过程与存储函数
MySQL从5.0版本开始支持 存储过程和函数.存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可. 1. 存储过 ...
最新文章
- 阿里巴巴云原生应用安全防护实践与 OpenKruise 的新领域
- 在Emacs中使用ECB(转载)
- 关于MyEclipse项目的名字的修改对项目导入导出的影响
- pos机未能连接服务器,pos 机链接不了服务器
- java抓取屏幕像素,以像素为单位获取屏幕尺寸
- 公安部4号令中关于电子邮服务器
- java案例代码21-电影院购票系统[重要]
- Windows下 Nginx日志文件按计划时间自动分割、手动备份
- el-dialog 一些问题 局中滚动
- 异常排查_Python-日志模块.NoSectionError: No section: '*' 错误?
- 【大数据之路-阿里巴巴大数据实践】第一篇 数据技术篇
- Microsoft Visual Studio 2010安装教程
- linux sub减法指令出错,sparc的指令的一些总结
- FPGA:开发环境Vivado的使用
- web前端开发主要做什么?应该学些什么?
- 为什么同门硕士进了BAT拿高工资,而博士却要挤破头进985高校?
- matlab找不到exe文件,如何修复pyinstaller在从scrip创建exe文件时找不到matlab文件的问题...
- IAP 促销优惠(promotional offer)后端接入指南
- 小朱学英语------day 3 Ne zha's success and a blast from the past
- stata联立方程组笔记代码
热门文章
- Arch Linux 服务器,Arch Linux不适合当作服务器操作系统的四大原因
- python距离向量路由算法_python算法练习——动态规划与字符串的编辑距离
- 玩转springboot2.x之快速搭建(start.spring.io)
- 域名,端口,IP总结
- php 获取当前url hash,PHP hash 接口对接
- ajax请求去获取base64_前端将图片转换为base64位,使用ajax传递到后台,但是图片经过base64转换成字符串后非常长,无法使用ajax...
- 素数和 c语言慕课,第五周 素数和问题
- 3-ESP8266 SDK开发基础入门篇--点亮一个灯
- 小程序做一个能够左右滑动切换的多tab页面
- 把javabean复制到另一个javabean 使用BeanUtils.copyProperties(a,b) 复制