報表SQL存儲過程開發中十條軍規
原文 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、盡可能少的減少嵌套循環的次數,將循環次數多的細的放到最內層。游標用完后要關閉。