进入项目已有一段时间了,不过数据库是DB2,感觉有点不习惯。
还没有对DB2做过深入的了解,对它整体的架构也没有一个宏观的理解。只是,项目需要短时间上线,因此,加紧开发存储过程,好多问题没有及时记下来,怕以后会狗熊掰棒子都会忘记,暂且写一下吧,以后陆续补充。
1、DB2游标的用法
(1)切忌,游标里不可以有 commit 等事务控制语句。但是可以有with hold语句,在定义或者打开时候使用(还是有要注意的问题,下篇帖子详细说明,with hold不是万能),这样可以使用事务控制。
declare sqlstate char(5) default '00000';
declare c cursor for select id from tbl_from;
while(sqlstate = '00000')
insert into tbl_to values(v_id);
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博客 ” ,链接:https://blog.itpub.net/17032106/viewspace-705023/
,如需转载,请注明出处,否则将追究法律责任。