DB2编程序技巧 (三)(db2教程视频)这都可以?

随心笔谈2年前发布 admin
209 0 0

文章摘要

这篇文章介绍了DB2编程的高级技巧,重点围绕游标(cursor)的使用展开。文章详细讲解了在DB2中使用`FOR`更新模式的基本原理及其优点,即无需使用`open`、`fetch`和`close`函数,且不支持`WITH HOLD`选项。这种模式特别适合在不需要事务操作的情况下进行更新,但当需要使用`commit`或`rollback`时则不可行,因此适合无事务需求的场景。 文章还介绍了如何在游标中执行更新操作,强调了游标的可修改性(`MODIFY`)、`FOR`更新模式的限制(如不支持`GROUP BY`、`DISTINCT`等关键字),以及如何避免使用`UNION ALL`以外的集合操作。此外,文章详细讲解了如何用`CASE`语句模拟Oracle的`DECODE`功能,解决字符查找(`LOCATE`)、日期计算(`DATEDIFF`)等问题,并提供了UDF(用户定义函数)的使用示例。 最后,文章还介绍了如何在表中生成自定义ID,强调了每列只能有一个`IDENTITY`字段。总体来看,文章内容涵盖了DB2编程中的多个重要技巧,适合有一定数据库编程基础的读者学习。


正在看的db2教程是:DB2编程序技巧 (三)。  另一种为

      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v.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.

<

© 版权声明

相关文章