假设有一个表A,定义如下:
! }) A: Y' `) x3 ~# s- Q 如果在存储过程中,使用如下语句:
1 k7 G- T0 v0 A& I9 h5 v select sum(vcount) into fcount from A where bid='xxxxxx';如果A表中不存在bid="xxxxxx"的记录,则fcount=null(即使fcount定义时设置了默认值,如:fcount number(8):=0依然无效,fcount还是会变成null),这样以后使用fcount时就可能有问题,所以在这里最好先判断一下:
6 d+ v8 b# Y$ S 以下是代码片段:; K0 h( c" p( b. G9 l3 W
if fcount is null then
( T$ X. \2 v( f+ N: {; d fcount:=0;+ q% ^6 u9 _6 q) s# t1 r
end if;( S$ d1 @: a6 e# k# ]7 O3 y+ I
这样就一切ok了。4 ^$ m" g2 @+ u) C$ e
6.Hibernate调用oracle存储过程
2 y- Q8 ~# i3 q. a8 z* N, j 以下是代码片段:
2 J& m4 x* ^7 |9 k8 Q! R6 X this.pnumberManager.getHibernateTemplate().execute(
! h, d+ }" H; j- J1 y4 B" U new HibernateCallback() ...{
4 a8 d B" d9 m# ?2 H public Object doInHibernate(Session session)# ?" k( `: V' h3 i+ S9 N8 v# q
throws HibernateException, SQLException ...{+ ^! I, B! h8 D& p$ R
CallableStatement cs = session: c7 n5 n2 f7 ^- @
.connection()* w; ^% [3 h2 C
.prepareCall("{call modifyapppnumber_remain(?)}");
7 ] p" a' u5 y% b; ?! A0 u, a5 @2 ] cs.setString(1, foundationid);! v! Y, a& K2 f+ j) K
cs.execute();
( c5 B; [% R' L6 O/ E" B2 _ return null;
. Q S9 L& _! A( W }" H+ R+ O- w6 Y) ~1 T1 O, n. d
});
) f7 W! h6 ^# `$ ~5 H, E 以下是代码片段:8 s9 n: l, Z( m1 I1 E9 y
create table A(
- J3 ~ c) U7 L# e( [; L" o: M id varchar2(50) primary key not null,
n& d8 D' r4 |, y' `, E7 v vcount number(8) not null,
2 R) | l4 T7 f& L, Q( y bid varchar2(50) not null -- 外键
0 Y) Z2 g1 N4 [3 O ); |