`
chenhua_1984
  • 浏览: 1252201 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

ibatis调用oracle的动态sql,sql大小不能超过32K

阅读更多

1环境:oracle10g,spring2.5,ibatis2.3.

2由于项目里面要调用oracle的存储过程,原本采用如下方法调用:

 {call ?=Tlgadmin.check(?,?)}

但实际上是会报异常:提示oracle的动态sql语句太长。后来由数据库小组得知:动态sql的大小是有限制的。大小不能超过32K。

既然oracle自己不能执行那么长的sql,实际的调用办法:用jdbc 来调用:应为代码是存在数据里的,所以首先先把它取出来,然后用jdbc 来调用。

 A取出类型为CLOB的sql,配置文件这么写的:

  <resultMap id="recycle_codeList"
        class="com.hzmc.capaa.domain.persistence.cap.RecycleCode">
        <result property="id" column="id" />
        <result property="owner" column="owner" />
        <result property="name" column="name" />
        <result property="otype" column="otype" />
        <result property="status" column="status" />
        <result property="code" column="code"
            typeHandler="org.springframework.orm.ibatis.support.ClobStringTypeHandler" />

        <result property="opseq" column="opseq" />
        <result property="optype" column="optype" />
        <result property="opTime" column="optime" />
        <result property="dbId" column="dbid" />
    </resultMap>

   <select id="RecycleCode_showClobDetailById"
         resultMap="recycle_codeList" parameterMap="recycleCodeMap">
        select id,owner,name,otype,status,code,opseq,optype,optime,dbid from
        mc$$asset_recycle_code where id=? and dbid=?
    </select>

 B java代码:取出CLOB,然后用jdbc执行。

public RecycleCode showColobByIdAndRecoving(Map map) {
        RecycleCode code = (RecycleCode) this.getSqlMapClientTemplate()
                .queryForObject("RecycleCode_showClobDetailById", map);

        Connection con = null;
        Statement st = null;
        try {
            con = this.getSqlMapClientTemplate().getDataSource()
                    .getConnection();
            st = con.createStatement();
            st.execute(code.getCode());
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                st.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return code;
    }

这样就可以解决oracle执行动态sql大小不能超过32k的问题。

分享到:
评论
3 楼 chenhua_1984 2009-04-03  
用jdbc执行sql语句,并不是调用oracle的系统函数来执行的!jdbc对sql的长度限制是多少其实我也不敢确定!网上有说是128的,但是jdbc的限制要比oracle的要大!这个是可以肯定的。
2 楼 75468850 2009-04-03  
memphis 写道
我记得不错的话,这样执行ORACLE本身对SQL语句的长度也是有限制的。

ORACLE的SQL语句的长度是有限制的
1 楼 memphis 2009-04-03  
我记得不错的话,这样执行ORACLE本身对SQL语句的长度也是有限制的。

相关推荐

    ibatis调用oracle存储过程分页

    ibatis调用oracle存储过程分页

    ibatis调用oracle存储过程

    在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...

    Ibatis调用Oracle存储过程返回自定义类型

    ### Ibatis调用Oracle存储过程返回自定义类型 在企业级应用开发中,尤其是在金融、保险等业务场景中,往往需要处理复杂的数据结构与逻辑。本文将深入探讨如何使用Ibatis框架来调用Oracle数据库中的存储过程,并实现...

    ibatis动态SQL标签用法

    iBatis动态SQL标签用法 iBatis是Java持久层框架,提供了动态SQL标签来实现动态查询。动态SQL标签可以根据不同的条件生成不同的SQL语句,从而提高查询效率和灵活性。 动态SQL片段 iBatis提供了动态SQL片段的功能,...

    ibatis调用oracle的函数,存储过程的方法

    Ibatis,一个轻量级的Java持久层框架,提供了与数据库交互的能力,包括调用这些Oracle的函数和存储过程。本篇文章将详细介绍如何在Ibatis中调用Oracle的函数和存储过程。 首先,理解基本概念: 1. **Oracle函数**...

    Ibatis+Oracle(含对应数据库sql) 源码

    在实践中,你可以期待找到如何创建Oracle数据库表的SQL脚本,如何配置Ibatis以连接Oracle,如何编写和执行SQL语句,以及如何在Java代码中调用这些操作的示例。 总的来说,这个资源将帮助学习者理解以下几个关键知识...

    ibatis+oracle实例

    3. **存储过程调用**:Ibatis可以通过`&lt;select&gt;`、`&lt;procedure&gt;`元素调用Oracle的存储过程,增强业务逻辑的封装性。 4. **连接池管理**:Ibatis可以与各种连接池(如C3P0、Druid、HikariCP等)集成,提高数据库连接...

    ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标

    本篇文章将详细探讨如何在iBatis中调用Oracle的函数和存储过程,尤其是处理IN和OUT参数以及游标的场景。 首先,我们需要了解iBatis的基本工作原理。iBatis是一个SQL映射框架,它允许开发者将SQL语句写在XML配置文件...

    iBatis的动态SQL语句

    ### iBatis中的动态SQL语句详解 #### 引言 在进行数据库操作时,我们经常需要根据不同的条件构建不同的SQL语句。...希望本文能帮助开发者更好地理解和掌握iBatis框架中的动态SQL技术,从而提升开发效率和项目质量。

    ibatis连接oracle所需的jar包

    5. **调用Ibatis接口**:在Java代码中,通过SqlSession对象调用SQL映射文件中的方法执行数据库操作。例如: ```java SqlSession session = sqlSessionFactory.openSession(); User user = session.selectOne(...

    ibatis 读取oracle clob类型

    ibatis 读取oracle clob类型

    Spring MVC+ibatis+oracle框架整合

    通过这样的整合,开发者能够利用Spring MVC的控制反转和依赖注入,iBatis的SQL灵活性,以及Oracle的高性能存储,构建出一个稳定、高效的Web应用系统。同时,这个项目也为其他开发者提供了一个学习和参考的实例,帮助...

    ibatIS调用存储过程

    ibatIS调用存储过程是数据库操作中常见的一种技术,特别是在复杂的业务逻辑处理或数据批量操作时,存储过程能够提供更高的效率和更好的性能。本文将深入探讨如何在ibatIS框架中调用存储过程,以及涉及到的相关知识点...

    spring+ibatis+oracle分页缓存源码

    Spring、iBatis和Oracle的结合提供了强大的数据处理能力。本文将深入探讨这些技术如何协同工作,实现高效的分页缓存策略。 首先,Spring是一个开源的Java框架,它为开发人员提供了依赖注入(DI)和面向切面编程...

    ibatis调用存储过程.txt

    根据提供的文件信息,标题为“ibatis调用存储过程”,主要关注的是如何使用ibatis框架来调用数据库中的存储过程。下面将详细解释ibatis框架的基本概念、存储过程的概念以及如何在ibatis中配置和执行存储过程。 ### ...

    ibatis + oracle 增删改查例子

    `iBatis`是一个优秀的持久层框架,它使得Java开发者能够方便地将SQL语句与Java代码相结合,实现灵活的数据访问。而`Oracle`作为一款功能强大的关系型数据库管理系统,广泛应用于大型企业级应用。本示例“ibatis + ...

    spring mvc+ibatis+oracle单表增删改(有包)

    此外,iBATIS还支持动态SQL,使得SQL构建更加灵活。 至于Oracle数据库,它的特点是高性能、高可靠性以及丰富的功能。在单表操作中,可能涉及创建User表,包含id、name、email等字段,以及相关的主键约束和索引。增...

Global site tag (gtag.js) - Google Analytics