ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 初涉DB2开发

初涉DB2开发

原创 Linux操作系统 作者:流浪天际 时间:2011-08-16 22:59:27 0 删除 编辑
进入项目已有一段时间了,不过数据库是DB2,感觉有点不习惯。
还没有对DB2做过深入的了解,对它整体的架构也没有一个宏观的理解。只是,项目需要短时间上线,因此,加紧开发存储过程,好多问题没有及时记下来,怕以后会狗熊掰棒子都会忘记,暂且写一下吧,以后陆续补充。
1、DB2游标的用法
(1)切忌,游标里不可以有 commit 等事务控制语句。但是可以有
with hold语句,在定义或者打开时候使用(还是有要注意的问题,下篇帖子详细说明,with hold不是万能),这样可以使用事务控制。
(2)游标示例,记住一定要循环。
  1. create procedure sp_01()
  2. language sql
  3. begin
  4.     declare v_id int;
  5.     declare sqlstate char(5) default '00000';
  6.     declare c cursor for select id from tbl_from;

  7.     open c;
  8.     fetch from c into v_id;
  9.     while(sqlstate = '00000')
  10.     do
  11.         insert into tbl_to values(v_id);
  12.         fetch from c into v_id;
  13.     end while;
  14.     close c;
  15. end@
2、关于动态语句的用法.
set v_sql = 'call risk3.rm_log(20110909,20110909,8101001,v_flag)';
prepare s from v_sql;
execute s;
这样是错误的,目前好像没有这种用法,v_flag 是输出参数。相当于是过程的嵌套,那么必须在嵌套的过程里面有这个定义,但是动态语句这样的写法,可能决定了是不能这样执行语句的吧。

set v_flag = 'c'
set v_sql = 'call risk3.rm_log(20110909,20110909,8101001,?)';
prepare s from v_sql;
execute s  using v_flag;
此时,v_flag 是输入参数,才可以这样用。执行时候,把v_flag的值传进去。

但是,建议不要这样写,动态sql还是需要好好学习,或者避免这样不知对错的写法,采用其他方式实现。
3、DB2 临时表:CGTT DGTT
区别和用法见上一篇日志。
4、最后,不论做什么事情,规划、设计是最重要的!!
(1)只有把框架搭起来,并且很牢固,这样以后在此基础上开发才会很健壮,并且不用频繁修改,或者因为某些小原因改动过多,甚至需要修改框架,那是谁都最不愿意看到的!
(2)将模型和业务分离。
业务就是专门处理业务的流程,而模型是抽象出来的东西,是可以通用的或者复用的。不仅以后扩展性很好,而且减少相当的工作量。
说的通俗点,就是模块化!
不要将长长的东西都杂糅在一起,不仅逻辑、流程不清晰,而且后期维护起来麻烦(此是低内聚)。要层层调用、嵌套,尽量做到低耦合、
高内聚
,这是最基础的框架模型,益处且不必说。


最后用句话做个总结吧,什么事情都不要瞎着急,磨刀不误砍柴工。哪怕规划、设计或者细节等基础的东西用了很长的时间,也不用怕,因为只有基础打的牢固,你会发现后续会非常的简单,乃至事半功倍,提前完成任务,你会庆幸坚持这样做的理念。


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17032106/viewspace-705023/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 游标与事务控制
请登录后发表评论 登录
全部评论

注册时间:2010-12-27

  • 博文量
    39
  • 访问量
    86703