您的位置:首页 > 数据库 > Oracle

java 调用 oracle 存储过程

2014-12-05 00:00 429 查看
摘要: java 调用 oracle 存储过程

-- 编写过程,要求输入雇员编号,返回雇员姓名。

create or replace procedure getNameByNo(no in number, name out varchar2) is

begin

select ename into name from emp where empno = no;

end;

-- 输入部门号,返回该部门所有员工

-- 先建一个包,定义一个游标类型

create or replace package pkg_cursor is

type my_cursor_type is ref cursor;

end pkg_cursor;

-- 创建过程

create or replace procedure getByDeptno(depno in number, emp_cursor out pkg_cursor.my_cursor_type) is

begin

open emp_cursor for

select * from emp where deptno = depno;

end;

2) java中调用的过程
a. 注册驱动类,并获取数据库连接
b. 用过程调用SQL语句(用{}括起来)获取CallableStatement对象。
c. 设置输入参数,如:cs.setInt(1, 7788);
d. 注册输出参数,如:cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
e. 执行过程cs.execute();
f. 获取过程返回结果,如:ResultSet rs = (ResultSet)cs.getObject(2);

g. 最后在finally中关闭资源。 import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

public class TestPro1 {

static final int empno = 7788;

static final int depno = 10;

public static void main(String[] args) {

Connection con = null;

CallableStatement cs = null;

try {

//注册JDBC驱动类

Class.forName("oracle.jdbc.driver.OracleDriver");

//获取连接

con = DriverManager.

getConnection("jdbc:oracle:thin:
@localhost :1521:orcltest", "test", "mm");

/************************* getNameByNo start ****************************/

cs = con.prepareCall("{call getNameByNo(?,?)}");

//设置参数

cs.setInt(1, empno);

//注册输出参数

cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);

//执行过程

cs.execute();

//获取结果

String ename = cs.getString(2);

System.out.println("编号为" + empno + " 的姓名为:" + ename);

//编号为7788 的姓名为:SCOTT

/************************* getNameByNo end ****************************/

/************************* getByDeptno start ****************************/

cs = con.prepareCall("{call getByDeptno(?, ?)}");

//设置参数

cs.setInt(1, depno);

//注册输出参数

cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);

cs.execute();

//得到结果集

ResultSet rs = (ResultSet)cs.getObject(2);

System.out.println("部门号为" + depno + "的所有员工如下:");

while(rs.next()) {

System.out.println("员工编号:" + rs.getInt(1) +

", 员工姓名:" + rs.getString(2));

}

/************************* getByDeptno end ****************************/

//关闭资源(应在finally, 由于是示例就在这里关了)

cs.close();

con.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 调用 存储过程