服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - DB2 - DB2编程序技巧(1)

DB2编程序技巧(1)

2020-06-09 18:14数据库之家 DB2

本文主要讲解DB2编程序技巧(1),具有一定的参考价值,有需要的朋友可以参考一下。

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

延伸 · 阅读

精彩推荐
  • DB2DB2专家王云谈商业智能BI

    DB2专家王云谈商业智能BI

    王云说: 既然讲商业智能,我们大家都在讲及时性,我们讲要有绩效,要有BPM,我自己就来看看我们能不能在这个会场上,我们来实践一下,如果大家抬头...

    DB2数据库教程网4202020-06-10
  • DB2DB2 UDB V8.1管理学习笔记(三)

    DB2 UDB V8.1管理学习笔记(三)

    本文主要讲解DB2 UDB V8.1管理学习笔记(三),有需要的朋友可以参考下 ...

    DB2数据库教程网3182020-06-03
  • DB2CentOS下DB2数据库安装过程详解

    CentOS下DB2数据库安装过程详解

    这篇文章主要介绍了CentOS下DB2数据库安装过程详解,本文步骤详细,操作的命令也比较全,需要的朋友可以参考下 ...

    DB2数据库教程网3572020-06-06
  • DB2db2数据库常用操作命令大全

    db2数据库常用操作命令大全

    这篇文章主要介绍了db2数据库常用操作命令大全,汇总了DB2的常用操作命令,分享给大家供大家参考,需要的朋友可以参考下...

    db2教程网6962021-10-21
  • DB2如何访问大型机、小型机上的DB2 9数据服务器

    如何访问大型机、小型机上的DB2 9数据服务器

    数据库连接工具软件 DB2 connect的基本特性是为桌面应用程序和服务主机的数据库服务器之间提供一种连接交互访问的方法。这些桌面应用程序所在的环境可...

    脚本之家3242020-06-10
  • DB2python之sqlalchemy创建表的实例详解

    python之sqlalchemy创建表的实例详解

    这篇文章主要介绍了数据库之sqlalchemy创建表的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握理解这部分内容,需要的朋友可以参考下...

    wait_for_eva8502020-06-11
  • DB2分析DB2活动日志满的原因及解决DB2日志满方法与避免方案

    分析DB2活动日志满的原因及解决DB2日志满方法与避免方案

    本文简单地介绍了DB2中日志的使用、活动日志以及首个活动日志的概念、日志满的原因、日志满的诊断、临时处理以及避免办法 ...

    wdc3462020-06-05
  • DB2DB2 SELECT语句高级用法

    DB2 SELECT语句高级用法

    DB2 SELECT语句高级用法,学习db2数据库的朋友可以参考下。 ...

    DB2数据库教程网6242020-06-08