每個月的月初要給公司市場體系部門出一些月度統計報表,雖然用asp.net 2.0做了一個前端工具,操作也儘可能的簡化,在推廣使用中遇到2個問題:
1、業務部門主觀上不太接收,以往都是用excel包裝好發到他們油箱,現在要改爲他們自己上網站上取,有個別同事不願意。
2、月度統計的數據量比較大,查詢耗時過長(個別要5分鐘或10分鐘)。所以即使將這些查詢功能放到asp.net的網站上,也是無法使用,半天出不了結果(業務人員抱怨不絕入耳)。
注:這些查詢的輸出行數在1萬-2萬行左右,在asp.net中使用了rdlc報表工具(自帶分頁、導出到excel/pdf文件)。
鑑於這兩個問題無法在短期內解決,財務部門的月度統計報表仍舊由手工出。查詢統計功能已經全部封裝成存儲過程的代碼。在Oracle9i中,存儲過程返回結果集沒有在MSSQL那麼方便(直接發出select語句),它需要定義Ref Cursor,最後通過open v_curorname for select ...來打開引用遊標。
若是對普通select語句,在pl/sql developer中執行後,在結果集上右擊後選中“Copy to excel...”菜單即可。而對於返回結果集的存儲過程(非表函數Table Function),不能用普通select * from p_procname(...)調用來獲取結果集,所以比較麻煩。
後來發現,可以通過新建Test文件(*.tst),在pl/sql developer中執行後,打開多個結果集,並分別將結果集導出到excel中。在F8執行完後,在輸出參數的遊標後面,點擊標題爲"..."的按鈕,彈出新窗口即可取出結果集,再利用右擊後執行“Copy to excel...”菜單即可依次將結果輸出到excel文件中。
新建tst文件相對比較簡單,可以在打開package的代碼中,選中某個procedure或function,右擊選擇“test”菜單,即可生成一個模板,再稍作修改即可。增加若干個存儲過程調用,以及對應的參數聲明。這麼做的好處時能夠預定義輸出順序,對於有10來個worksheet的excel處理較好,預先定義好每個工作表的表頭和內容格式,保存成一個模板,再拷貝數據結果集。
目前的狀況下,這是能找到的最快的解決辦法。