2019独角兽企业重金招聘Python工程师标准>>>

1、创建存储过程的语句:

1、表结构:①:create table TESTA(A_ID   VARCHAR2(10) not null,A_NAME VARCHAR2(10))2、存储过程:①:create or replace procedure proc_testA(para1 in varchar2, para2 in varchar2) as
begininsert into testA(a_id, a_Name) values (para1, para2);
end proc_testA;②:create or replace procedure proc_testA2(para1 in varchar2, para2 out varchar2) as
beginselect a_name into para2 from testA where a_id = para1;
end proc_testA2;③:create or replace procedure proc_testA3(p_cursor out pack_testa.testa_cursor
) is
beginopen p_cursor for select * from Testa;
end proc_testa3;3、Package:①:create or replace package pack_testA as
typetesta_cursor is ref cursor;
end pack_testA;4、说明:①:由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,
列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
第一创建程序包Package,第二创建存储过程。②:在程序中获取存储过程的输出参数,需通过CallableStatement对象的registerOutParameter(int,int)方法
获取。方法的参数①对应存储过程的out参数的位置,从1开始;方法的参数二对应存储过程的out参数的声明类型。

2、测试类TestProceDure.java

/*** @包名 :com.andy.procedureDemo<br>* @文件名 :TestProceDure.java<br>* @类描述 :<br>* @作者 :Andy.wang<br>* @创建时间 :2014-10-11下午03:42:16<br>* @更改人 :<br>* @更改时间 :<br>*/
package com.andy.procedureDemo;import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;import oracle.jdbc.OracleTypes;/*** @包名 :com.andy.procedureDemo<br>* @文件名 :TestProceDure.java<br>* @类描述 :测试Java调用存储过程<br>* @作者 :Andy.wang<br>* @创建时间 :2014-10-11下午03:42:16<br>* @更改人 :<br>* @更改时间 :<br>*/
public class TestProceDure {private static String driver = "oracle.jdbc.driver.OracleDriver";private static String dbUrl = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";private static String dbName = "test";private static String dbPwd = "1";static {try {Class.forName(driver);} catch (ClassNotFoundException e) {e.printStackTrace();}}private Connection conn = null;private PreparedStatement ps = null;private ResultSet rs = null;private CallableStatement cstmt = null;private String sql = null;private void closeResource() {try {if (null != rs) {rs.close();}if (null != ps) {ps.close();}if (null != conn) {conn.close();}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}/*** * @方法名 :testProcdDure1<br>* @方法描述 :测试 无返回值的存储过程<br>* @创建者 :Andy.wang<br>* @创建时间 :2014-10-11下午03:47:11 <br>*       返回类型 :void*/private void testProcdDure1() {try {conn = DriverManager.getConnection(dbUrl, dbName, dbPwd);sql = "{ call proc_testA(?,?)}";cstmt = conn.prepareCall(sql);cstmt.setString(1, "10");cstmt.setString(2, "Grvin");boolean b = cstmt.execute();System.out.println("b = " + b);// 执行成功,但返回值为false} catch (SQLException e) {e.printStackTrace();} finally {closeResource();}}/*** * @方法名 :testProcdDure2<br>* @方法描述 :测试 有返回值的存储过程<br>* @创建者 :Andy.wang<br>* @创建时间 :2014-10-11下午03:58:42 <br>*       返回类型 :void*/private void testProcdDure2() {try {conn = DriverManager.getConnection(dbUrl, dbName, dbPwd);sql = "{ call proc_testA2(?,?)}";cstmt = conn.prepareCall(sql);cstmt.setString(1, "100");cstmt.registerOutParameter(2, Types.VARCHAR);boolean b = cstmt.execute();System.out.println("b = " + b);// 执行成功,但返回值为falseString name = cstmt.getString(2);// 这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的System.out.println("返回值:" + name);} catch (SQLException e) {e.printStackTrace();} finally {closeResource();}}/*** * @方法名 :testProcdDure3<br>* @方法描述 :测试 有返回值,且返回值为“列表”的存储过程<br>* @创建者 :Andy.wang<br>* @创建时间 :2014-10-11下午04:03:41 <br>*       返回类型 :void*/private void testProcdDure3() {try {conn = DriverManager.getConnection(dbUrl, dbName, dbPwd);sql = "{ call proc_testA3(?)}";cstmt = conn.prepareCall(sql);cstmt.registerOutParameter(1, OracleTypes.CURSOR);// 以“列表”形式输出boolean b = cstmt.execute();System.out.println("b = " + b);// 执行成功,但返回值为falsers = (ResultSet) cstmt.getObject(1);while (rs.next()) {System.out.println("id = " + rs.getString(1) + "; name = "+ rs.getString(2));}} catch (SQLException e) {e.printStackTrace();} finally {closeResource();}}public static void main(String[] args) {new TestProceDure().testProcdDure1();new TestProceDure().testProcdDure2();new TestProceDure().testProcdDure3();}}

最后感谢“ 鹰翔宇空”,本文出自“ http://www.blogjava.net/TrampEagle/archive/2005/12/13/23605.html”

转载于:https://my.oschina.net/andy1989/blog/326847

Java 调用Oracle的存储过程相关推荐

  1. java调用oracle过程,JAVA调用ORACLE存储过程报错

    当前位置:我的异常网» Java Web开发 » JAVA调用ORACLE存储过程报错 JAVA调用ORACLE存储过程报错 www.myexceptions.net  网友分享于:2015-07-1 ...

  2. Java调用Oracle存储Package

    Oracle的包Package中可以有很多存储,可通过该包的总调入口在java中直接调用. //java调用oracle的package代码 public boolean cal() throws j ...

  3. java下实现调用oracle的存储过程和函数

    在oracle下创建一个test的账户,然后按一下步骤执行: 1.创建表:STOCK_PRICES View Code 2.插入测试数据: View Code 3.建立一个返回游标: PKG_PUB_ ...

  4. java 调用存储过程structdescriptor,Java调用oracle存储过程,集合入参的正确姿势

    这是我工作之前遇到的一个需求,Java调用存储过程,入参是集合.踩了一些坑,决定写个干货,和大家分享下. 项目使用的oracle版本: com.oracle ojdbc6 11.2.0.1.0 sys ...

  5. java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程

    一.需求 传入一个参数,返回一条或多条记录(列表). 二.实现步骤 1. 编写Oracle存储过程. -- 声明包和包体的语句应该分两次执行,即使声明在前定义在后,如果一起执行依然会编译出错 --调用 ...

  6. java调用oracle存储过程_java调用oracle存储过程详解

    之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧. 首先来看一下项目结构: 在数据库创建存储过程的脚本,假如,使用的是本地的oracl ...

  7. Java 调用 Oracle 存储过程返回结果集

    1. 建立 ref cursor 类型和过程 Sql代码 CREATE OR REPLACE PACKAGE types AS TYPE ref_cursor IS REF CURSOR; END; ...

  8. Java调用oracle存储过程报无效的列索引的错误

    今天第一次在java中调用数据库的存储过程,直接上代码 public void insertSql(String taskCode, String exeSql)throws Exception{ja ...

  9. oracle怎么调报表,集智数据平台报表如何调用Oracle数据存储过程

    需要注意的是,当在单元格中用call函数调用存储过程时,执行存储过程,返回结果数据集合,只能返回单列数据,如果存储过程返回多个 数据集的数据来自存储过程.sql语句执行的时候要先编译,然后执行.存储过 ...

最新文章

  1. 人工智能商业化的重点:语音交互和人脸识别
  2. pycharm中导入allure提示模块不存在解决方法
  3. IntelliJ IDEA 重大更新:支持CPU火焰图,新增酷炫主题
  4. roast和roasting区别_《吐槽大会》的英文居然是roast!为什么?
  5. 【52】写了placement new也要写placement delete
  6. spring cloud 熔断_Spring Cloud 熔断器/断路器 Hystrix
  7. zend studio 9实用快捷键大全 分享ZEND STUDIO 9的常用快捷键,高亮显示相同变量。...
  8. 使用bat将数据连续写入文件中
  9. R 包的手动打包流程
  10. Java --人民币(RMB)小写/数字转换大写工具类
  11. 实现360浏览器内核模式切换
  12. Maple中solve和dsolve的区别:solve方程解,dsolve常微分方程解
  13. [Excel知识技能] 将文本型数字转换为数值格式
  14. 【转载】9个offer,12家公司,35场面试,从微软到谷歌
  15. STM32 ADC最大采样频率
  16. 微pe添加网络组件_对第三方PE加以定制的基本方法
  17. python pip 的安装、更新、卸载、降级、和使用 pip 管理包
  18. 京东内网遭开源的“顶级”SpringCloud实战手册,GitHub列为首推
  19. 软件修复硬盘物理坏道究竟靠不靠谱?效哥告诉你标准答案
  20. 无盘服务器汇聚,Microsoft PowerPoint - 网吧无盘系统网卡汇聚与交换机汇聚教程(包会).pdf...

热门文章

  1. Ubuntu服务器版硬件认证详情
  2. centos7搭建git+maven+jenkins快速集成、部署环境(docker方式)(一)
  3. 亲爱的,别把上帝缩小了 ---- 读书笔记2
  4. 在Developerkit开发板上运行blink例程
  5. MnasNet:迈向移动端机器学习模型设计的自动化之路
  6. Android JSON数据解析(GSON方式)
  7. 网易微专业之《前端开发工程师》学习笔记(1)
  8. Spring 系列,第 2 部分: 当 Hibernate 遇上 Spring
  9. 在java项目中加载IEDriverServer.exe引用路径
  10. RHCT 模拟题库及答案