频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

DB2编程基础要点(1)

作者: 出处:51CTOcom整理  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2005-12-01 16:42
关 键 词:DB2
阅读提示:本文是关于DB2编程的基础要点和一些应用技巧

1 DB2编程

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

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

1.2 使用临时表

要注意,临时表只能建在user tempory tables space 上,如果database只有system tempory table space是不能建临时表的。

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

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

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

select  *  from tb_market_code fetch first 1 rows only

但下面这种方式不允许:

select market_code into v_market_code  
from tb_market_code fetch first 1 rows only;

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

declare v_market_code char(1);
declare cursor1 cursor for select market_code from tb_market_code  
fetch first 1 rows only for update;
open cursor1;
fetch cursor1 into v_market_code;
close cursor1;

1.4 游标的使用

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

游标的两种定义方式:

一种为:

declare continue handler for not found 
begin 
set v_notfound = 1; 
end; 
declare cursor1 cursor with hold for 

select market_code from tb_market_code  for update; 
open cursor1; 
set v_notfound=0; 
fetch cursor1 into v_market_code; 
while v_notfound=0 Do 
--work 
set v_notfound=0; 
fetch cursor1 into v_market_code; 
end while; 
close cursor1;

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

另一种为:

pcursor1: for loopcs1 as  cousor1  cursor  as 
select  market_code  as market_code
from tb_market_code
for update
do
end for;

这种方式的优点是比较简单,不用(也不允许)使用open,fetch,close。
但不能使用with  hold 选项。如果在游标循环内要使用commit,rollback则不能使用这种方式。如果没有commit或rollback的要求,推荐使用这种方式(看来For这种方式有问题)。
修改游标的当前记录的方法

update tb_market_code set market_code='0' where current of cursor1;

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

declare cursor1 cursor for select market_code from tb_market_code  
for update;

for update 不能和GROUP BY、 DISTINCT、 ORDER BY、 FOR READ ONLY及UNION, EXCEPT, or INTERSECT但 UNION ALL除外)一起使用。
1.5 类似decode的转码操作
oracle中有一个函数

select decode(a1,'1','n1','2','n2','n3') aa1 from

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

select case a1  
when '1' then 'n1'  
when '2' then 'n2'  
else 'n3'
  end as aa1 from

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

Locate(‘y’,’dfdasfay’)
查找’y’ 在’dfdasfay’中的位置。

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

days(date(‘2001-06-05’)) – days(date(‘2001-04-01’))
days 返回的是从  0001-01-01 开始计算的天数

1.8 写UDF的例子

C写见sqllib\samples\cli\udfsrv.c

1.9 创建含identity值(即自动生成的ID)的表

建这样的表的写法:

CREATE TABLE test
(t1 SMALLINT NOT NULL
GENERATED ALWAYS AS IDENTITY
(START WITH 500, INCREMENT BY 1),
t2 CHAR(1));

在一个表中只允许有一个identity的column。

1.10 预防字段空值的处理

SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPT
FROM DEPARTMENT

COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式。 
和oracle的isnull类似,但isnull好象只能两个表达式。

1.11 取得处理的记录数

declare v_count int;
update tb_test set t1=’0’
where t2=’2’;
--检查修改的行数,判断指定的记录是否存在
get diagnostics v_ count=ROW_COUNT;

只对update,insert,delete起作用.
不对select into 有效


共5页: 1 [2] [3] [4] [5] 下一页
【内容导航】
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·SQL Server入门到精通 (查看49847次)
·SQL Server 2005全解 (查看45978次)
·Oracle数据库开发指南 (查看29526次)
·Oracle SQL 内置函数大全 (查看27518次)
·MySQL数据库备份 (查看23309次)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有