发新话题
打印

DB2编程序技巧 (三)

DB2编程序技巧 (三)


另一种为 + @2 c+ G" L( J* U6 Y% N
pcursor1:forloopcs1ascousor1cursoras
% S2 l* u% [( n0 t& ]% A% @selectmarket_codeasmarket_code
/ i' U7 Y+ u6 d* r% _+ qfromtb_market_code
; y, H7 e1 I8 Y8 p/ K$ M: e/ Mforupdate ! Y/ z2 a4 v4 E5 O3 n5 L
do . ~. z& g+ P- s# j" j
endfor;
' `; h+ ]  d, j, J这种方式的优点是比较简单,不用(也不允许)使用open,fetch,close。 + G: m7 }; `. ^
但不能使用withhold选项。如果在游标循环内要使用commit,rollback则不能使用这种方式。如果没有commit或rollback的要求,推荐使用这种方式(看来For这种方式有问题)。 3 I* N( z0 q; j* Z3 j6 M- L& _

$ G2 |3 c. V# N+ M修改游标的当前记录的方法
" L5 C: m+ s: @& I& Z  R  Nupdatetb_market_codesetmarket_code='0'wherecurrentofcursor1; $ \5 \6 T4 n. r% V/ j9 E  ]
不过要注意将cursor1定义为可修改的游标 - Z% n8 X; G) W- k
declarecursor1cursorforselectmarket_codefromtb_market_code
7 {% r+ a1 u0 X: H4 G" yforupdate; ' E+ F5 w) B% ?  ^$ N: B

1 H) y+ l: F$ G1 Iforupdate不能和GROUPBY、DISTINCT、ORDERBY、FORREADONLY及UNION,EXCEPT,orINTERSECT但UNIONALL除外)一起使用。   r6 w8 r) b1 {- \2 s/ B

8 N3 v! J' {: [! }+ H: ~) }6 Y7 @$ j- g' ~' h

2 p. W# a& O! ?1.5 类似decode的转码操作 # u3 `6 l9 m% p
oracle中有一个函数 selectdecode(a1,'1','n1','2','n2','n3')aa1from ! S/ ?( P8 R6 \' s4 f
db2没有该函数,但可以用变通的方法 . H5 e+ P7 Q4 m: T9 I2 o9 h
selectcasea1
: \) W" _4 q( i8 g! l2 Vwhen'1'then'n1' 3 m& R  e* R0 W( I" ]+ _% P
when'2'then'n2'
% W9 h$ L4 O5 Y& X5 selse'n3' ' ?; W# W8 `6 C
endasaa1from % I' j& a- N$ a' q5 w

) J; |8 D  x* H: ^1.6 类似charindex查找字符在字串中的位置
1 B' \- X+ C8 }- T2 r" G7 s. {Locate(‘y’,’dfdasfay’)
  \, n. O& H) J4 y5 q8 A  {) s/ b查找’y’在’dfdasfay’中的位置。 3 d' R7 U: G# L0 R

8 @* u, D8 h6 X. P1.7 类似datedif计算两个日期的相差天数
, U) B$ Z: T* m$ c2 {days(date(‘2001-06-05’))–days(date(‘2001-04-01’)) 6 u( ?: F! Y4 T& y
days返回的是从0001-01-01开始计算的天数 & c6 q  ]4 z( p: e5 b- @
1.8 写UDF的例子 . u9 I( ~& C" [
C写见sqllib\samples\cli\udfsrv.c
$ w! H: R: W* P* h. e
1 }& I+ F( F& b4 ^' j2 M! r1.9 创建含identity值(即自动生成的ID)的表 2 C5 `+ a* y9 D1 {4 c
建这样的表的写法 2 Y# E# C2 `9 @
CREATETABLEtest % e. ^3 Z0 @! h# L
(t1SMALLINTNOTNULL ! O; A: _3 H! b: W
GENERATEDALWAYSASIDENTITY
" c7 F4 Z0 E; C: G(STARTWITH500,INCREMENTBY1), 1 }6 l4 V5 ~, Y" x; q9 Y- S; e
t2CHAR(1)); 8 A+ o% G# }, V* M8 V" w
在一个表中只允许有一个identity的column.



点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹

TOP

发新话题