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的存储过程和存储函数相关推荐

  1. oracle 查看函数被哪些触发器引用_oracle如何查看存储过程,存储函数,触发器的具体内容...

    (1)set serveroutput on 实现plsql developer 打印输出 (2)如何查看存储过程,存储函数,触发器的内容 查 user_sources表 eg:查询GET_DEPT_ ...

  2. oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门

    文章思维导图 一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数.复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数 ...

  3. 编程开发之--Oracle数据库--存储过程和存储函数(2)

    上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在java程序中如何调用我们创建的存储过程和存储函数 1.在应用程序中调用我们的存储过程 创建一个简单的Ja ...

  4. oracle as 不可以省略,Oracle:存储过程,存储函数

    什么是存储过程和存储函数:指存储在数据库中供所有用户程序调用的子程序叫做存储过程.存储函数. 这个子程序是用PL/SQL写的.可以用Java程序调用,就是完成特定功能的子程序. 用create pro ...

  5. java 执行oracle 存储过程_oracle--在java中调用存储过程和存储函数

    在java中调用存储过程和存储函数 存储过程: 查询某个员工的姓名 月薪 职位: create or replace procedure queryempinfo(eno in number, pen ...

  6. JDBC使用总结:增删改查、调用存储过程、执行存储函数、存储过程与存储函数区别分析

    JDBC(Java Database Connectivity):Java访问数据库的解决方案. JDBC只定义接口,具体实现由各个数据库厂商负责. 原生jdbc技术的使用基本都是模板式的开发,基本格 ...

  7. Oracle存储过程和存储函数创建

    select * from emp; -----------------存储过程------------------------ --定义create[or replace] procedure 存储 ...

  8. Oracle的存储过程和存储函数

    存储过程和存储函数:指存储在数据库中供所有用户程序调用的子程序叫做存储过程.存储函数. 他们也是数据库的对象,类似于表.视图.索引.序列.同义词等. 存储函数可以用return返回值,而存储过程不可以 ...

  9. 【宋红康 MySQL数据库】【基础版】【15】存储过程与存储函数

    文章目录 存储过程与存储函数 定义存储过程与存储函数 对比存储函数和存储过程 存储过程概述 理解 分类 创建存储过程 语法分析 代码举例 调用存储过程 调用格式 代码举例 如何调试 存储函数的使用 语 ...

  10. 15_MySQL存储过程与存储函数

    MySQL从5.0版本开始支持 存储过程和函数.存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可. 1. 存储过 ...

最新文章

  1. 阿里巴巴云原生应用安全防护实践与 OpenKruise 的新领域
  2. 在Emacs中使用ECB(转载)
  3. 关于MyEclipse项目的名字的修改对项目导入导出的影响
  4. pos机未能连接服务器,pos 机链接不了服务器
  5. java抓取屏幕像素,以像素为单位获取屏幕尺寸
  6. 公安部4号令中关于电子邮服务器
  7. java案例代码21-电影院购票系统[重要]
  8. Windows下 Nginx日志文件按计划时间自动分割、手动备份
  9. el-dialog 一些问题 局中滚动
  10. 异常排查_Python-日志模块.NoSectionError: No section: '*' 错误?
  11. 【大数据之路-阿里巴巴大数据实践】第一篇 数据技术篇
  12. Microsoft Visual Studio 2010安装教程
  13. linux sub减法指令出错,sparc的指令的一些总结
  14. FPGA:开发环境Vivado的使用
  15. web前端开发主要做什么?应该学些什么?
  16. 为什么同门硕士进了BAT拿高工资,而博士却要挤破头进985高校?
  17. matlab找不到exe文件,如何修复pyinstaller在从scrip创建exe文件时找不到matlab文件的问题...
  18. IAP 促销优惠(promotional offer)后端接入指南
  19. 小朱学英语------day 3 Ne zha's success and a blast from the past
  20. stata联立方程组笔记代码

热门文章

  1. Arch Linux 服务器,Arch Linux不适合当作服务器操作系统的四大原因
  2. python距离向量路由算法_python算法练习——动态规划与字符串的编辑距离
  3. 玩转springboot2.x之快速搭建(start.spring.io)
  4. 域名,端口,IP总结
  5. php 获取当前url hash,PHP hash 接口对接
  6. ajax请求去获取base64_前端将图片转换为base64位,使用ajax传递到后台,但是图片经过base64转换成字符串后非常长,无法使用ajax...
  7. 素数和 c语言慕课,第五周 素数和问题
  8. 3-ESP8266 SDK开发基础入门篇--点亮一个灯
  9. 小程序做一个能够左右滑动切换的多tab页面
  10. 把javabean复制到另一个javabean 使用BeanUtils.copyProperties(a,b) 复制