当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle认证辅导之ibatis调用oracle的动态sql
发布时间:2009/11/22 16:00:12 来源:城市学习网 编辑:admin

  1环境:oracle10g,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的问题。

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved