1. 程式人生 > >pl/sql developer將結果集輸出到excel

pl/sql developer將結果集輸出到excel

每個月的月初要給公司市場體系部門出一些月度統計報表,雖然用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處理較好,預先定義好每個工作表的表頭和內容格式,儲存成一個模板,再拷貝資料結果集。

目前的狀況下,這是能找到的最快的解決辦法。