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();

}

}

}

时间: 2024-11-08 20:03:24

java 调用 oracle 存储过程的相关文章

用java调用oracle存储过程总结(转)

//1.call+包名+存储过程名(传入.传出值用?) String str="{call SMSBUSINESS.deleteZhZMember(?,?,?)}"; //2.建立连接 Connection conn=null; conn=DriverManager.getConnection(); //3.使用java.sql.*类 CallableStatement cs=conn.prepareCall(str); //4.传入in值 cs.setInt(1,id); cs.se

java基础---->java调用oracle存储过程(转)

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.今天,我们就开始学习java中调用oracle的存储过程. java中调用oracle的存储过程 项目结构如下: 一. 在数据库创建存储过程的脚本,如果使用的是本地的oracle数据库,则需要开启服务:OracleOraDb11g_home1TNSListener和OracleServiceORCL.

java基础---->java调用oracle存储过程

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.今天,我们就开始学习java中调用oracle的存储过程. java中调用oracle的存储过程 项目结构如下: 一. 在数据库创建存储过程的脚本,如果使用的是本地的oracle数据库,则需要开启服务:OracleOraDb11g_home1TNSListener和OracleServiceORCL.

Java调用Oracle存储过程

一:无返回值的存储过程 存储过程为: CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2); END TESTA; 然后呢,在java里调用时就用下面的代码: import java.sql.*; import java.sql.ResultSet; public class T

Java调用Oracle存储过程过程中几个问题

1.java.sql.SQLException: 无效的名称模式: STKSETTLEADMIN.TY_MARKETDATA 用户STKSETTLEADMIN下没有TY_MARKETDATA. 2..java.sql.SQLException: 无效的名称模式: SettleAdmin.TY_MARKETDATA 用户SettleAdmin名称要大写. 3.java.lang.NullPointerException at oracle.jdbc.driver.T4CNamedTypeAcces

在java中调用Oracle存储过程

在java中调用Oracle存储过程 本文介绍如何通过java来调用Oracle的存储过程 1. 编写存储过程 CREATE OR REPLACE PROCEDURE sp_pro3(sp_name VARCHAR2,sp_sal NUMBER ) IS BEGIN --根据用户名修改工资 UPDATE emp SET sal=sp_sal WHERE ename=sp_name; END; 引入jdbc6.jar,编写测试类Test.java package testOraclePro; im

jdbc调用 oracle 存储过程操作

创建有参存储函数findEmpNameAndSal(编号),查询7902号员工的的姓名和月薪,[返回多个值,演示out的用法]当返回2个或多个值,必须使用out符号当返回1个值,就无需out符号 create or replace function findEmpNameAndSal(pempno in number,pename out varchar2) return numberas psal emp.sal%type;begin select ename,sal into pename,

Java调用Oracle存储Package

Oracle的包Package中可以有很多存储,可通过该包的总调入口在java中直接调用. //java调用oracle的package代码 public boolean cal() throws java.lang.Exception { CallableStatement cstmt = null; String procedure = "{call G_IMPORT_CAL.g_entry(?,?,?) }"; cstmt = conn.prepareCall(procedure

C#调用 Oracle 存储过程样例代码

-- 建表CREATE TABLE sale_report (     sale_date DATE NOT NULL ,     sale_item VARCHAR(2) NOT NULL ,      sale_money DECIMAL(10,2) NOT NULL,      PRIMARY KEY(sale_date, sale_item)); -- 測试数据DECLAREv_begin_day DATE;v_end_day DATE;BEGIN v_begin_day := TO_D