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
发表评论
-
SQLSERVER存储过程改为DB2存储过程
2009-11-21 23:38 1224CREATE PROCEDURE sp抄表 (@j ... -
探讨SQL语句技巧 优化DB2应用程序性能
2009-11-21 23:06 901本文以IBM的关系数据库 ... -
数据库优化之SQL语句性能调整原则
2009-11-21 23:05 742一、问题的提出 在应用系统开发初期,由于开发数据库数据比 ... -
DB2数据库SQL编码优化基础
2009-11-21 23:04 843简介 当要保证用 IBM DB2® Universal ... -
DB2数据库的隔离级解读
2009-11-21 23:01 814基本信息 摘要:在DB2中,共有四种隔离级:RS,RR, ... -
java调用db2存储过程例子
2009-11-21 22:44 41601. JAVA 调用db2存储过程最 ... -
DB2 中游标的使用以及 存储过程的写法
2009-11-21 22:39 1267from:http://j2megame.bokee.com/ ... -
DB2的存储过程调用例子
2009-11-21 22:35 2973语法说明1、procedure-name: 存储过程的名字,在 ... -
DB2下JAVA编程注意问题
2009-11-21 22:20 16581、DB2升级后JDBC无法连 ... -
DB2日期和时间的函数,及应用
2009-11-21 22:02 855DAYNAME 返回一 ... -
DB2表及sp管理
2009-11-21 22:00 12323.1 看存储过程文本 select text from ... -
DB2编程性能注意
2009-11-21 21:58 8252.1 大数据的导表 应该是export后再 ... -
DB2编程序技巧 (四)
2009-11-21 21:51 5361.16 存储过程fence及unfence fence的存储 ... -
DB2编程序技巧 (三)
2009-11-21 21:50 7981.12 从存储过程返回结果集(游标)的用法 1、建一s ... -
DB2编程序技巧(二)
2009-11-21 21:49 8111.6 类似charindex查找字符在字串中的位置 ... -
DB2中通用的存储过程分页程序
2009-11-21 21:48 715CREATE PROCEDURE SALES.DB2PAGIN ... -
DB2编程技巧
2009-11-21 21:38 8711 DB2编程 1.1 建存储过程 ... -
DB2存储过程例子
2009-11-21 21:23 1576CREATE PROCEDURE IPD.st_inter_P ... -
DB2sql存储过程基础
2009-11-21 20:43 760基本概念: 存储过程即stored procedure,一般会 ... -
DB2存储过程入门(一)
2009-11-21 19:58 1117首先,打开DB2开发中心,新建项目后,连接上指定的数据库。右键 ...
相关推荐
《DB2编程序技巧》,很实用的DB2教程。
DB2编程序小小技巧
DB2编程序技巧 (一)
DB2编程序技巧 (七)
DB2编程序技巧 (五)
DB2编程序技巧(1)
DB2数据库的简单介绍和用法,编程序技巧.chm
DB2编程序技巧 (三)
DB2编程序技巧 (四)
DB2编程序技巧 (十)
DB2编程序技巧 (六)
DB2编程序技巧 (九)
DB2编程序技巧 (八)
DB2编程序技巧; DB2的数据同步经验总结; db2教程-DB2 CLP 命令的快速参考; db2教程-DB2 性能监控; db2教程-DB2常用傻瓜问题1000问; db2教程-db2数据库的备份和恢复; db2教程-DB2优化; db2教程-DB2中的限制; db2教程-...
用于 Visual Studio .Net 的 IBM DB2 开发外接程序 第2章 并发操作的一致性问题 (2) Using sqlite with .NET Visual Studio 2005 中的新 DataSet 特性 MySQL 和 .Net2.0配合使用 与DotNet数据对象结合的自定义数据...
通过对实际案例开发过程的详细分析,使读者掌握 SQL的综合应用技巧。 内容简介 本书主要介绍SQL的语法规则及在实际开发中的应用,并且对SQL在MySQL、MS SQL Server、Oracle和DB2中的差异进行了分析。本书分为3部分:...