查看完整版本: DB2编程序技巧 (二)

豹子 2007-6-23 09:48

DB2编程序技巧 (二)

1 DB2编程
XKt_"J} 1.1 建存储过程时Create后一定不要用TAB键 Uv.cK9tK^-b
create procedure
8?uO0w[+GF 的create后只能用空格,而不可用tab健,否则编译会通不过。
w$h0n(JB-W{ 切记,切记。 2}^&})`A)m6k;d8?
'Of?!`5}B1HyL
1.2 使用临时表 GTX v0a%NC
|J%{},aRN
要注意,临时表只能建在usertemporytablesspace上,如果database只有systemtemporytablespace是不能建临时表的。 )Wx?3t^O
另外,DB2的临时表和sybase及oracle的临时表不太一样,DB2的临时表是在一个session内有效的。所以,如果程序有多线程,最好不要用临时表,很难控制。 (f"v"}~p1Jd
建临时表时最好加上withreplace选项,这样就可以不显示的drop临时表,建临时表时如果不加该选项而该临时表在该session内已创建且没有drop,这时会发生错误。 r0^9i)fh2jrG
1.3 从数据表中取指定前几条记录 L yn)\9C [C
select*fromtb_market_codefetchfirst1rowsonly #_.o]s~4z"X
"aSO6Z8k!ta
但下面这种方式不允许 -cm,m&z~h#@
selectmarket_codeintov_market_code
{4`KOn F fromtb_market_codefetchfirst1rowsonly; b3mq:QL LxID

'_[c8l%o ul 选第一条记录的字段到一个变量以以下方式代替 1Y5Z!rYSC#X4G5|3?L
declarev_market_codechar(1);
}EKG+n declarecursor1cursorforselectmarket_codefromtb_market_code ER0O Y^K fsL&l
fetchfirst1rowsonlyforupdate; *@6n0BD8ZVZ
opencursor1; %l5}/VP aw$~m
fetchcursor1intov_market_code; U*p S+v T ^'C
closecursor1; 5JkAi,aU C

D(N9~dXL6o.z 1.4 游标的使用 o!^OcK6m7[
注意commit和rollback A7B[9}:H j+N
使用游标时要特别注意如果没有加withhold选项,在Commit和Rollback时,该游标将被关闭。Commit和Rollback有很多东西要注意。特别小心
*D*lPjpz&Y
)jp%U.u};kH 游标的两种定义方式
_)nMjN HY4y7w 一种为 M7|1[K+Y b9X@u
declarecontinuehandlerfornotfound dC U0F*q&k)VOTGY
begin it#t+jr;O
setv_notfound=1; /_z}.wzE$R
end; N;Dk/j8U
:U3g6JL2`;?#K0G
declarecursor1cursorwithholdforselectmarket_codefromtb_market_code forupdate; [#vEGY&h c7f2W
opencursor1; G4^8~ Mv:o7I3h7`
setv_notfound=0;
DJ h#f7y fetchcursor1intov_market_code;
,m;_.X)dQ*B,m;L whilev_notfound=0Do
)hC+K]N J --work (fdnlZ
setv_notfound=0; s"FNR/u mHL;]|j2c
fetchcursor1intov_market_code;
y:J Q jxw endwhile;
}^&qn9h)kUwq closecursor1;
7} A6A-K?)x:_u 这种方式使用起来比较复杂,但也比较灵活。特别是可以使用withhold选项。如果循环内有commit或rollback而要保持该cursor不被关闭,只能使用这种方式。
页: [1]
查看完整版本: DB2编程序技巧 (二)