a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 367|回复: 0

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

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
1环境:oracle10g,ibatis2.3.- m5 d! M+ t& ]6 t
  2由于项目里面要调用oracle的存储过程,原本采用如下方法调用:
  X3 Z: H) h8 b; u  {call ?=Tlgadmin.check(?,?)}
7 F$ m, n8 ^) P  但实际上是会报异常:提示oracle的动态sql语句太长。后来由数据库小组得知:动态sql的大小是有限制的。大小不能超过32K。* g: t7 }# W" a+ X7 F
  既然oracle自己不能执行那么长的sql,实际的调用办法:用jdbc 来调用:应为代码是存在数据里的,所以首先先把它取出来,然后用jdbc 来调用。6 |" S' C, Z6 `. Y# u2 ?4 }
  A取出类型为CLOB的sql,配置文件这么写的:; b0 ^; }; T; Q
  
; ~! V; X( h0 H+ }, s6 e  
# R$ {2 t+ y5 Z* R) N  d3 h  0 f9 V% ~: n. }
  ! W! M6 z- c4 p" n' C
  
/ @9 _6 ]5 a7 N$ }/ e/ D  
/ N1 L% w; r6 {4 f7 A  $ h( p! S9 \5 [/ ]0 O7 w
  ; y' c( f- C0 d- H6 p
  
% n* _' |; ^  [( M+ C( u  
2 }/ l1 \7 E- D9 @6 h  ?1 U2 }7 N  9 _) d7 F* y# y4 }  d4 f
  : f( H" K! d5 q: v) {5 P9 n
    select id,owner,name,otype,status,code,opseq,optype,optime,dbid from  mc$$asset_recycle_code where id=? and dbid=?  6 U4 n: V) h# W
  B java代码:取出CLOB,然后用jdbc执行。
/ a% L! C- e! p. I2 i* G  public RecycleCode showColobByIdAndRecoving(Map map) {' [* w7 N3 r% Y: U0 X
  RecycleCode code = (RecycleCode) this.getSqlMapClientTemplate(), l9 A# G) y8 D  Q* B& L
  .queryForObject(“RecycleCode_showClobDetailById”, map);
0 C2 D+ r: {$ m7 P+ \5 ~0 l  Connection con = null;
$ U6 k) Q5 h2 C  x9 F  Statement st = null;
8 n+ k; C4 R; u# `" i( _( ~: ~  try {
* P/ I* n# }. q/ S" |. z: `' @) p5 e  con = this.getSqlMapClientTemplate().getDataSource() .getConnection();; l5 x/ T+ w9 D" c5 o
  st = con.createStatement();/ W* r. I1 c- Z/ l+ W8 ^
  st.execute(code.getCode());; H$ C7 N' r5 k2 j; x
  } catch (SQLException e) {
& T" i/ f, j* _9 r% m  e.printStackTrace();
1 q- p1 ?, q& x( m* v* k  } finally {
$ z1 d$ Y: |! G3 t& c( d; X8 Q  try {7 e5 X! w" u/ z. a
  st.close(); con.close();
; A( Q! u1 L; r  } catch (SQLException e) {
' F9 e* R/ ?. P8 V6 b3 W  e.printStackTrace();
' N6 o  r. v8 I0 c. k5 |: Y  }' ]) O2 K5 H, y
  }
& C  ~7 j+ d0 x: d' }  return code;
" a- y7 v% D2 v+ Z  }
$ s1 [+ B) A" R2 E7 s4 d  这样就可以解决oracle执行动态sql大小不能超过32k的问题。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 23:27 , Processed in 0.470189 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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