----包声明
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
PROCEDURE proc_findResult(u_cursor OUT myrctype, u_id NUMBER);
FUNCTION fun_findResult(u_id NUMBER) return myrctype;
END pkg_test;
----包主体的声明
CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE proc_findResult(u_cursor OUT myrctype ,u_id NUMBER)
IS
sqlString VARCHAR2 (500);
BEGIN
IF u_id = 0 THEN
OPEN u_cursor FOR SELECT userId, userName, password, groupName FROM user_account ORDER BY userId;
ELSE
sqlString :='SELECT userId, userName, password, groupName FROM user_account where userId=:w_id';
OPEN u_cursor FOR sqlString USING u_id;
END IF;
END proc_findResult;
function fun_findResult(u_id NUMBER) RETURN myrctype
IS
u_cursor myrctype;
sqlString VARCHAR2 (500);
BEGIN
IF u_id = 0 THEN
OPEN u_cursor FOR SELECT userId, userName, password, groupName FROM user_account ORDER BY userId;
ELSE
sqlString :='SELECT userId, userName, password, groupName FROM user_account where userId=:w_id';
OPEN u_cursor FOR sqlString USING u_id;
END IF;
return u_cursor;
END fun_findResult;
END pkg_test;
/********************************************************************************
IBatis SQLMap 中的配置
********************************************************************************/
<resultMap id="userAccount" class="org.taink.entity.UserAccount" >
<result property="userId" column="userId" columnIndex="1"/>
<result property="userName" column="userName" columnIndex="2"/>
<result property="password" column="password" columnIndex="3"/>
<result property="groupName" column="groupName" columnIndex="4"/>
</resultMap>
输出参数也是配置在parametermap中
<!-- call procedure parameter
<parameterMap id="parameterMap" class="java.util.HashMap">
<parameter property="u_cursor" jdbcType="ORACLECURSOR"
javaType="java.sql.ResultSet" mode="OUT" />
<parameter property="u_id" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
-->
<!-- call procedure
<procedure id="test_cursor" parameterMap="parameterMap" resultMap="userAccount">
{call pkg_test.proc_findResult(?,?)}
</procedure>
-->
<!-- call function parameter -->
<parameterMap id="parameterMap" class="java.util.HashMap">
<parameter property="u_cursor" jdbcType="ORACLECURSOR"
javaType="java.sql.ResultSet" mode="OUT" />
<parameter property="u_id" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
<!-- call function -->
<procedure id="test_cursor" parameterMap="parameterMap" resultMap="userAccount">
{? = call pkg_test.fun_findResult(?)}
</procedure>
Dao layer java code
@SuppressWarnings("unchecked")
@Override
public List findAllUserAccountByProcOrFun(Map parameterMap) {
List result = null;
try {
result = super.sqlMapClient.queryForList("test_cursor",parameterMap);
} catch (SQLException e) {
System.out.println("-------------error-------------");
e.printStackTrace();
}
return result;
}
/********************************************************************************
java Test class
********************************************************************************/
public class TestProcOrFun {
public static void main(String[] args) {
IUserAccountDao userAccountDao = new UserAccountDaoImpl();
// find all object by procedure or function operation
Map parameterMap = new HashMap();
parameterMap.put("u_id", 15);
List accountList =
userAccountDao.findAllUserAccountByProcOrFun(parameterMap);
if (accountList.size()>0 ) {
for (Object temp : accountList) {
if (temp != null) {
System.out.println(((UserAccount)temp).toString());
}
}
} else {
System.out.println("result is null");
}
}
}
分享到:
相关推荐
ibatIS调用存储过程是数据库操作中常见的一种技术,特别是在复杂的业务逻辑处理或数据批量操作时,存储过程能够提供更高的效率和更好的性能。本文将深入探讨如何在ibatIS框架中调用存储过程,以及涉及到的相关知识点...
根据提供的文件信息,标题为“ibatis调用存储过程”,主要关注的是如何使用ibatis框架来调用数据库中的存储过程。下面将详细解释ibatis框架的基本概念、存储过程的概念以及如何在ibatis中配置和执行存储过程。 ### ...
本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库中创建一个存储过程。以下是一个Oracle数据库中的存储过程示例: ```sql CREATE OR REPLACE PROCEDURE pp ...
iBatis调用存储过程
### Ibatis调用存储过程详解 #### 一、引言 在实际的软件开发过程中,存储过程因其执行效率高及数据库级别的安全性等优点被广泛应用于各种业务场景之中。而对于使用Ibatis作为持久层框架的应用来说,如何有效地...
ibatis调用oracle存储过程分页
本文将深入探讨如何使用iBatis调用存储过程并返回游标,这是一个在处理复杂数据库操作时常见的需求。 ### iBatis调用存储过程返回游标 #### 存储过程简介 存储过程是预先编译并存储在数据库中的SQL代码块,它可以...
最后,在Java代码中,通过ibatis的Session对象调用存储过程,传入必要的参数,处理返回的结果集。 ```java SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources....
#### 使用Ibatis调用存储过程 Ibatis是一个Java持久层框架,它能够简化Java应用程序与数据库之间的交互。为了调用上述存储过程并正确处理返回值,我们需要进行以下配置: ##### 日志配置(log4j.properties) ```...
在实际项目中,使用Ibatis调用存储过程时,还应注意以下几点: 1. 不同的数据库系统可能有不同的存储过程调用语法,如Oracle、MySQL、SQL Server等,需要根据具体数据库进行调整。 2. 存储过程中的输出参数在Java...
"IBatis查删改查与调用存储过程 mysql数据库" 这个标题揭示了本文将深入探讨如何使用IBatis框架在MySQL数据库中执行基本的CRUD(创建、读取、更新、删除)操作,以及如何调用存储过程。IBatis是一个轻量级的Java持久...
学习这两份文档,开发者不仅可以理解iBATIS的基本工作原理,还能掌握如何高效地利用iBATIS调用存储过程,提高数据库操作的灵活性和性能。对于Java开发者,尤其是从事Web应用开发的人员,深入理解和熟练运用iBATIS是...
调用存储过程: ```java Map, Object> params = new HashMap(); params.put("id", id); sqlSession.execute("updateEmployeeStatus", params); String status = (String) params.get("status"); ``` 5. **...
在这个项目中,我们结合了Spring框架、Ibatis持久层框架以及Blazeds技术,来演示如何调用存储过程并处理返回的结果集。下面将详细讲解这些技术的运用。 首先,J2EE是一种广泛用于开发分布式企业应用的平台,它提供...
本篇文章将详细探讨如何在iBatis中调用Oracle的函数和存储过程,尤其是处理IN和OUT参数以及游标的场景。 首先,我们需要了解iBatis的基本工作原理。iBatis是一个SQL映射框架,它允许开发者将SQL语句写在XML配置文件...
2. **iBatis调用存储过程**: iBatis允许开发者直接调用数据库的存储过程。在XML映射文件中,使用`<procedure>`标签来定义存储过程的调用,指定存储过程的名称和参数。存储过程的输入和输出参数通过`<parameterMap>...
在IT行业中,数据库操作是不可或缺的一部分,而IBatis作为一款流行的数据映射框架,提供了一种灵活的方式来处理SQL语句,包括调用存储过程。存储过程是数据库中预编译的SQL语句集合,可以提高性能、增强安全性,并...