欢迎来到福编程网,本站提供各种互联网专业知识!
您的位置:网站首页 > 数据库 > DB2

DB2编程序技巧(1)

发布时间:2007-04-23 作者: 来源:转载
正在看的db2教程是:DB2编程序技巧(1)。1DB2编程1.1建存储过程时Create后一定不要用TAB键createprocedure的create后只能用空格,而不可用tab健,否则编译会通不过。切记,切记。1.2使用临时表要注意,临时表只能建在usertemporytablesspace上,如果data
正在看的db2教程是:DB2编程序技巧(1)。

1DB2编程

1.1建存储过程时Create后一定不要用TAB键

createprocedure

的create后只能用空格,而不可用tab健,否则编译会通不过。

切记,切记。

1.2使用临时表

要注意,临时表只能建在usertemporytablesspace上,如果database只有systemtemporytablespace是不能建临时表的。

另外,DB2的临时表和sybase及oracle的临时表不太一样,DB2的临时表是在一个session内有效的。所以,如果程序有多线程,最好不要用临时表,很难控制。

建临时表时最好加上withreplace选项,这样就可以不显示的drop临时表,建临时表时如果不加该选项而该临时表在该session内已创建且没有drop,这时会发生错误。

1.3从数据表中取指定前几条记录

select*fromtb_market_codefetchfirst1rowsonly

但下面这种方式不允许

selectmarket_codeintov_market_code

fromtb_market_codefetchfirst1rowsonly;

选第一条记录的字段到一个变量以以下方式代替

declarev_market_codechar(1);

declarecursor1cursorforselectmarket_codefromtb_market_code

fetchfirst1rowsonlyforupdate;

opencursor1;

fetchcursor1intov_market_code;

closecursor1;

1.4游标的使用

注意commit和rollback

使用游标时要特别注意如果没有加withhold选项,在Commit和Rollback时,该游标将被关闭。Commit和Rollback有很多东西要注意。特别小心

游标的两种定义方式

一种为

declarecontinuehandlerfornotfound

begin

setv_notfound=1;

end;

declarecursor1cursorwithholdforselectmarket_codefromtb_market_codeforupdate;

opencursor1;

setv_notfound=0;

fetchcursor1intov_market_code;

whilev_notfound=0Do

--work

setv_notfound=0;

fetchcursor1intov_market_code;

endwhile;

closecursor1;

这种方式使用起来比较复杂,但也比较灵活。特别是可以使用withhold选项。如果循环内有commit或rollback而要保持该cursor不被关闭,只能使用这种方式。

另一种为

pcursor1:forloopcs1ascousor1cursoras

selectmarket_codeasmarket_code

fromtb_market_code

forupdate

do

endfor;

这种方式的优点是比较简单,不用(也不允许)使用open,fetch,close。

但不能使用withhold选项。如果在游标循环内要使用commit,rollback则不能使用这种方式。如果没有commit或rollback的要求,推荐使用这种方式(看来For这种方式有问题)。

修改游标的当前记录的方法

updatetb_market_codesetmarket_code=’0’wherecurrentofcursor1;

不过要注意将cursor1定义为可修改的游标

declarecursor1cursorforselectmarket_codefromtb_market_code

forupdate;

forupdate不能和GROUPBY、DISTINCT、ORDERBY、FORREADONLY及UNION,EXCEPT,orINTERSECT但UNIONALL除外)一起使用。

1.5类似decode的转码操作

oracle中有一个函数selectdecode(a1,’1’,’n1’,’2’,’n2’,’n3’)aa1from

db2没有该函数,但可以用变通的方法

selectcasea1

when’1’then’n1’

when’2’then’n2’

else’n3’

endasaa1from

1.6类似charindex查找字符在字串中的位置

Locate(‘y','dfdasfay')

查找'y'在'dfdasfay'中的位置。

1.7类似datedif计算两个日期的相差天数

days(date(‘2001-06-05'))–days

相关推荐