创建有参存储函数findEmpNameAndSal(编号),查询7902号员工的的姓名和月薪,【返回多个值,演示out的用法】
当返回2个或多个值,必须使用out符号
当返回1个值,就无需out符号

create or replace function findEmpNameAndSal(pempno in number,pename out varchar2) return number
as
psal emp.sal%type;
begin
select ename,sal into pename,psal from emp where empno=pempno;
--返回月薪
return psal;
end;
/

---------------------------------------相互转值

以下为测试调用

declare
psal emp.sal%type;
pename emp.ename%type;
begin
psal := findEmpNameAndSal(7902,pename);
dbms_output.put_line('7902号员工的姓名'||pename||',薪水是'||psal);
end;
/

存储过程

创建有参存储过程findEmpNameAndSalAndJob(编号),查询7902号员工的的姓名,职位,月薪【演示out的用法】
create or replace procedure
findEmpNameAndSalAndJob(pempno in number,pename out varchar2,pjob out varchar2,psal out number)
as
begin
select ename,job,sal into pename,pjob,psal from emp where empno=pempno;
end;
/

以下测试调用

declare
pename emp.ename%type;
pjob emp.job%type;
psal emp.sal%type;
begin
findEmpNameAndSalAndJob(7902,pename,pjob,psal);
dbms_output.put_line('7902号员工的姓名是'||pename||':'||pjob||':'||psal);
end;
/

JDBC连接oracle

JdbcUtil.java 
 package cn.itcast.web.oracle.util;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement; public class JdbcUtil {
private static String driver = "oracle.jdbc.driver.OracleDriver";
//1521是主端口,也可能是其它端口去连接oracle数据库
private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private static String username = "scott";
private static String password = "friends";
private static Connection conn;
private static Statement stmt;
private static ResultSet rs;
//注册数据库驱动
static{
try {
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("oracle驱动注册失败");
}
}
//获取数据库连接
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(url,username,password);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("oracle连接获取失败");
}
return conn;
}
//关闭连接对象
public static void close(Connection conn){
if(conn!=null){
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("oracle连接关闭失败");
}
}
}
public static void close(Statement stmt){
if(stmt!=null){
try {
stmt.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("oracle连接关闭失败");
}
}
}
public static void close(ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("oracle连接关闭失败");
}
}
}
}

测试

     @Test
public void testConnection()
{
Connection conn=JdbcUtil.getConnection();
System.out.println(conn==null?"no":"yes");
}

测试存储过程

 //Java调用存储过程和函数
public class OracleDao {
//调用存储过程
@Test
public void callProcedure() throws Exception{
Connection conn = JdbcUtil.getConnection();
//第一参数:in 编号 7902
//第二参数:out 姓名
//第三参数:out 工作
//第四参数:out 薪水
String sql = "call findEmpNameAndSalAndJob(?,?,?,?)";
//创建专用于调用过程或函数的对象
CallableStatement cstmt = conn.prepareCall(sql);
//为?占位符设置in、out值
//hibernate从0开始,jdbc从1开始
cstmt.setInt(1,7902);//in值
cstmt.registerOutParameter(2,Types.VARCHAR);//out值
cstmt.registerOutParameter(3,Types.VARCHAR);//out值
cstmt.registerOutParameter(4,Types.INTEGER);//out值
cstmt.execute();//抛行调用存储过程
//依次接收3个返回值
String ename = cstmt.getString(2);
String job = cstmt.getString(3);
Integer sal = cstmt.getInt(4);
//显示
System.out.println(ename+"的工作是:" + job + ",它是薪水是" + sal);
//关闭连接对象
JdbcUtil.close(cstmt);
JdbcUtil.close(conn);
}
//调用存储函数
@Test
public void callFunction() throws Exception{
Connection conn = JdbcUtil.getConnection();
//参数一:in 编号 数值型
//参数二:out 姓名 字符串型
//返回值:out 薪水 数值型
String sql = "{? = call findEmpNameAndSal(?,?)}";
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.setInt(2,7788);//in
cstmt.registerOutParameter(3,Types.VARCHAR);//out
cstmt.registerOutParameter(1,Types.INTEGER);//返回值
cstmt.execute();//执行调用存储函数
String ename = cstmt.getString(3);
Integer sal = cstmt.getInt(1);
System.out.println(ename+"的薪水是"+sal);
//关闭连接对象
JdbcUtil.close(cstmt);
JdbcUtil.close(conn);
}
}

jdbc调用 oracle 存储过程操作的更多相关文章

  1. JDBC调用oracle 存储过程

    1.创建一个oracle存储过程 p_empInfo2 并执行,使这段sql代码能编译存储到oracle数据库中. --输入员工号查询某个员工(7839)信息,将薪水作为返回值输出,给调用的程序使用 ...

  2. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  3. 123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集

    c#调用oracle存储过程返回数据集 2008-12-20 10:59:57|  分类: net|字号 订阅   CREATE OR REPLACE PACKAGE pkg_tableTypeIS  ...

  4. c#调用oracle存储过程返回数据集

    c#调用oracle存储过程返回数据集 2008-12-20 10:59:57|  分类: net|字号 订阅   CREATE OR REPLACE PACKAGE pkg_tableTypeIS  ...

  5. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

  6. 用java 调用oracle存储过程总结

    SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例 https://www.jianshu.com/p/0ae6d9d66d61 用java调用oracle存储过程总结 //1.ca ...

  7. MyBatis调用Oracle存储过程

    MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...

  8. C#调用Oracle存储过程

    C#调用Oracle存储过程的代码如下所示: using System; using System.Collections.Generic; using System.Collections.Obje ...

  9. C#调用 oracle存储过程

    C#调用oracle 存储过程与调用Sql server存储过程类似,比较简单:直接给出示例: /// <summary> /// 判断物料类型是不是总部管控 /// </summa ...

随机推荐

  1. [BZOJ4033][HAOI2015]树上染色(树形DP)

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2437  Solved: 1034[Submit][Stat ...

  2. [BZOJ3576]江南乐

    挺好的题 我们算出每个数的sg值后异或起来即可 对于$n$,我们要求$sg_n$ 朴素的想法是枚举把$n$个石子分成$m$堆,有$m-n\%m$堆大小为$\left\lfloor\frac nm\ri ...

  3. Android Logcat Security(转)

    讲解了在Android开发中logcat使用不当导致的安全问题 原帖地址:http://drops.wooyun.org/tips/3812 0x00 科普 development version : ...

  4. winform 中设置窗体的默认焦点

    转载:http://www.cnblogs.com/weekzero/p/3504513.html winform的窗体中,有时候需要设置默认焦点,有时候需要取消默认焦点. 设置默认焦点,最简单的方法 ...

  5. subline text 工具快捷键说明

    编辑 ctrl + enter           光标当前行下一行新增一行,并且光标跳到下一行进行编辑 ctrl + shift +enter  光标当前行上一行新增一行,并且光标跳到上一行进行编辑 ...

  6. 那些年我们踩过的坑-NSTimer

    昨天下午工作的时候遇见一个这样的需求,网络请求失败后把请求数据保存到本地,并自动重发3次,时间间隔是10秒,如果3次后还失败的话,下一次启动这个接口的时候,把新数据和保存在本地的数据都要发送,刚开始以 ...

  7. html模板与json数据交互

    阅读这篇文章后,对html和json有很大的启发: http://www.zhangxinxu.com/wordpress/2012/09/javascript-html-json-template/ ...

  8. Android开发高级进阶——多进程间通信

    一. 什么是多进程? 多进程就是多个进程的意思,那么什么是进程呢? 当一个应用在开始运行时,系统会为它创建一个进程,一个应用默认只有一个进程,这个进程(主进程)的名称就是应用的包名. 进程的特点: 进 ...

  9. 用latex写毕业论文

    用 LaTeX 写漂亮学位论文(from wloo) 序 一直觉得有必要写这样一篇文章,因为学位论文从格式上说更像一本书,与文章 的排版不同,不仅多出目录等文章没有的部分,而且一般要设置页眉页脚方便阅 ...

  10. js调用高德地图的搜索api

    var city = $('#city')[0].value; AMap.plugin(['AMap.Autocomplete'],function(){ var autoOptions = { ci ...