在EJB 3.0中,传统的调用Oracle带Out返回值的存储过程是不被允许的。在项目中计算业务遇到了需要调用以上形式的存储过程,经过苦恼-纠结-痛苦直至变通。通过EntityManager获取到Hibernate的Session,再通过Session获取到Connection然后进行余下操作。
@Override
public Map executeToCollectPersonnel(Long formId, Long periodId,
String areaCode) {
Map<String, String> result = new HashMap<String, String>();
Session session = (Session) this.em.getDelegate();
Connection conn = session.connection();
try {
CallableStatement call = conn
.prepareCall("{CALL COLLECT_PERSONNEL(?,?,?,?)}");
call.setLong(1, formId);
call.setLong(2, periodId);
call.setString(3, areaCode);
call.registerOutParameter(4, oracle.jdbc.OracleTypes.VARCHAR);
call.execute();
String str = call.getString(4);
for(String temp : str.split(",")){
result.put(temp.split("#")[1], temp.split("#")[0]);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
分享到:
相关推荐
当使用VB与Oracle进行交互时,有时候我们需要调用Oracle中的存储过程,尤其是那些带有返回值的存储过程。下面将详细介绍如何在VB中实现这一操作。 首先,为了在VB中与Oracle数据库通信,我们需要引入Oracle的数据...
本文将详细讲解如何在Java中调用含有`OUT`参数的存储过程,帮助开发者解决这类问题。 首先,理解存储过程的概念。存储过程是预编译的SQL语句集合,存储在数据库服务器中,可以接受输入参数、输出参数,甚至同时具有...
### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...
Oracle存储过程是数据库管理系统中的一种重要程序设计组件,它允许用户在数据库中执行复杂的操作序列,而不仅仅局限于简单的SQL查询。在Oracle中,存储过程是由一个或多个SQL语句和PL/SQL块组成的,可以被封装起来并...
- **类型**:包括简单存储过程(只包含SQL语句)、带有参数的存储过程、带有游标的存储过程、带有异常处理的存储过程、带有返回值的存储过程等。 2. 创建存储过程: 使用`CREATE OR REPLACE PROCEDURE`语句来创建...
存储过程可以带有参数,分为输入参数(IN)、输出参数(OUT)和输入输出参数(IN OUT)。调用存储过程通常使用`CALL`语句,但某些情况下(如只有输出参数的情况),需要在PL/SQL块中调用。 - 无参数过程: ```sql ...
现在我们创建一个带有OUT参数的存储过程`TESTB`,它接收一个IN参数`PARA1`,返回一个VARCHAR2类型的值: ```sql CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2, PARA2 OUT VARCHAR2) AS BEGIN SELECT I_...
一、调用带有输入、输出参数的存储过程 1. 创建Oracle存储过程: ```sql CREATE OR REPLACE PROCEDURE GetRecords( name_out OUT VARCHAR2, age_in IN VARCHAR2 ) AS BEGIN SELECT NAME INTO name_out FROM test...
存储过程可以带有参数,参数分为输入(in)、输出(out)和输入/输出(in/out)三种类型。以下是一些参数过程的实例: 1. **无参数过程**: ```sql create or replace procedure stu_proc as pname student.sname%...
以下是一个带有IN、OUT和IN OUT参数的示例存储过程`mypar`: ```sql CREATE OR REPLACE PROCEDURE mypar(a IN number, b OUT number, c IN OUT number) IS BEGIN -- ... END mypar; / ``` 在C#中调用这个过程,你...
- 对于带有OUT或IN OUT参数的存储过程,必须声明变量来接收结果。 4. **复合数据处理和CTE**: - 使用Common Table Expressions(CTE)可以在存储过程中创建临时结果集,简化复杂查询和多步骤处理。 - CTE允许在...
##### 4.2 调用带有一个输入参数的函数 ```java try { // 准备调用函数 cs = connection.prepareCall("{? = call myfunc(?)}"); // 注册输出参数类型 cs.registerOutParameter(1, Types.VARCHAR); // 设置...
本文将深入讲解如何在C#中调用存储过程,并涵盖带返回值和参数输入输出的情况。 首先,存储过程`GetNameById`是一个接受输入参数`@studentid`和输出参数`@studentname`的示例。存储过程内部查询`student`表,根据`...
创建带有参数的存储过程 更进一步,我们来看一个包含参数的存储过程示例: ```sql CREATE OR REPLACE PROCEDURE 示例过程 (param1 IN NUMBER, param2 OUT NUMBER) IS v_count NUMBER; -- 定义局部变量 BEGIN ...
执行Oracle存储过程主要涉及以下几个关键点: 1. 创建CallableStatement对象:使用Connection对象的`prepareCall()`方法创建CallableStatement实例,例如`CallableStatement cs = conn.prepareCall("{call procedure...
对于带有参数的存储过程,调用时需提供相应的参数值。此外,对于包含OUT和INOUT参数的过程,可能需要使用变量来接收返回值或预先设定初始值。 通过以上内容,我们不仅了解了Oracle存储过程的基础知识,还掌握了如何...
本文将详细介绍如何在Java环境下调用Oracle存储过程,包括无参数存储过程、带输入参数的存储过程、带输出参数的存储过程以及带有输入输出参数的存储过程。 #### 无参数存储过程的调用 **创建无参存储过程** 在...
调用带`OUT`参数的存储过程,如`pro_findEmpNameById`,需要声明变量接收返回值: ```sql declare v_ename emp.ename%type; begin pro_findEmpNameById(7369, v_ename); dbms_output.put_line('编号 7369 对应的...
本文将详细解析如何通过Java调用Oracle存储过程,包括无返回值和有返回值的情况。 首先,我们需要了解存储过程的基本概念。存储过程是预编译在数据库端的一组SQL语句,可以接受输入参数,执行特定操作,并可能返回...