报表SQL存储过程开发中十条军规
jopen 10年前
原文 http://itindex.net/detail/52477-sql-存储过程-开发
报表SQL存储过程的特点:
通过一组变量作为输入参数,根据行控制变量的不同,循环查询,将每个查询的结果值保存到变量里面,够一组了,插入临时表(结果表),如此反复,直到循环结束。最终查询临时表,返回一个结果集的游标。
报表SQL存储过程十条军规:
1、存储过程中要尽可能少的定义变量,能复用就复用。
2、存储过程中两个列相互赋值、或者是变量给临时表中插入值的时候要注意两个数据类型定义要完全一致。
3、存储过程中临时表中的列名最好不要和存储过程中的变量名重名,否则,出现问题很难调试发现。
4、存储过程要注意循环条件的控制、对没有分组的规律的要创造出一些规律。对于多层循环要注意循环开关控制。
5、结果集最好用临时表保存,在插入结果集到临时表的时候,不要commit。否则临时表会清空甚至被drop掉。
6、存储过程语句一般来说越少越好,循环体中的SQL要反复优化,以减少表的扫描次数为终极目标,这样一般能获取更好的性能。
7、在用sum的时候,一定要注意对null值进行处理。比如为null的时候给一个默认值0。
8、在插入字符串数据的时候,一定要注意:空格、空串、null的区别,在适当的时候选择适当的值插入。
9、机器编号应该根据程序循环自动生成,对于多层嵌套循环的存储过程,内外层之间的逻辑关系要注意。比如内层循环的所得记录只求和为外层循环记录,所有外层循环的记录求和为合计行值。那么在处理的时候要通过变量记录每次外层循环的一些参数,以便求和方便。
10、尽可能少的减少嵌套循环的次数,将循环次数多的细的放到最内层。游标用完后要关闭。