a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 423|回复: 0

[考试辅导] Oracle认证辅导之ibatis调用oracle的动态sql

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
1环境:oracle10g,ibatis2.3.# ^% r* N1 w3 l1 _- Q
  2由于项目里面要调用oracle的存储过程,原本采用如下方法调用:
; s# g  i5 H) N+ }8 z/ M  m1 H  {call ?=Tlgadmin.check(?,?)}
0 R& ~& f; Y( _* A# ^. W$ }+ E$ \% |  但实际上是会报异常:提示oracle的动态sql语句太长。后来由数据库小组得知:动态sql的大小是有限制的。大小不能超过32K。
" x/ e5 z/ d* K& m8 }, M3 K. C0 |  既然oracle自己不能执行那么长的sql,实际的调用办法:用jdbc 来调用:应为代码是存在数据里的,所以首先先把它取出来,然后用jdbc 来调用。
) |; \. s# R  b4 k2 }$ W3 W; w1 y  A取出类型为CLOB的sql,配置文件这么写的:6 x7 i. r9 O; W: _. D8 _2 u! Z" G
  
; P$ H5 F' F- I0 ~0 D, ~0 b1 j  : ~/ j$ C( ]8 {( r! S
  
* U7 |. D1 ?! S. V3 [3 }; ~  
/ B) Y3 U, U1 ?" T5 `( m6 W4 X: t  
" v/ O) F  `, q% l  
7 G7 j* k  I# ?1 Y) f8 a' j  6 F& V+ Y, e/ ^! ]: A0 C6 V6 G
  
0 B* X3 T7 L- J  
- e/ }1 k& T) U/ `7 e/ q9 r3 K) X8 F  0 y: p2 e, U/ a: l- k( Y+ @
  6 p% |* B) v, e8 i3 v9 l
  ' H0 x6 _$ Q- @2 f7 L
    select id,owner,name,otype,status,code,opseq,optype,optime,dbid from  mc$$asset_recycle_code where id=? and dbid=?  
: p7 l% ~1 ^: U. c! O  B java代码:取出CLOB,然后用jdbc执行。
# U$ b7 b  S% }& G  public RecycleCode showColobByIdAndRecoving(Map map) {* `" C2 T" t& y8 E( P
  RecycleCode code = (RecycleCode) this.getSqlMapClientTemplate()
2 c% G% ^; @" D  j3 X  .queryForObject(“RecycleCode_showClobDetailById”, map);
3 ~; C! l! T7 G  Connection con = null;7 M/ J  P$ I4 ]3 ]. p' G
  Statement st = null;, s! K. X  [; `- x* i$ C  t6 O6 t0 p: t
  try {
, _2 F3 o4 A; p- o- [$ r  con = this.getSqlMapClientTemplate().getDataSource() .getConnection();
2 b% @: D" Q) k6 |5 Q$ d  st = con.createStatement();/ \( u) `1 y: G5 u, G& r
  st.execute(code.getCode());+ i# F) e  ]0 j* _; h5 E
  } catch (SQLException e) {
. F3 r& G) v, p0 Q+ c  e.printStackTrace();
( f9 Z7 K8 d) v# U5 N& D  } finally {$ x; K  y$ T3 u( z) |! E% O
  try {
' r- ?0 P$ [- l4 t* D! W! a  st.close(); con.close();
: o# c5 O( a; ?- Z' o# q  } catch (SQLException e) {% g% d6 f3 P: E# |
  e.printStackTrace();; |# w0 I( s7 r- s( v9 U
  }" C: e& k. B- K7 T, N! q: ]
  }' O& U. [5 e( p" v/ J7 _6 W) e& {# s
  return code;' m3 b( E% ~4 r
  }( ?5 \6 j4 k" Q( j' d  m
  这样就可以解决oracle执行动态sql大小不能超过32k的问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-9-23 02:11 , Processed in 0.929311 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表