2012-02-17 29 views
3

這是我的應用程序工作流程。關於PL/SQL應用程序劃分爲幾個單元

我有一個ref cursor與我的所有員工填充ID s ..這只是一個識別號碼。

但現在我想獲取的信息的很多員工...(爲獲取形式ref cursor)。它不是簡單的數據,但很多計算,得出的數據了。通過光標和程序等更容易完成的派生類型......

例如,員工駐留在部門78中的所有時間間隔的總和......(可能只是一個的每個員工列)。

所以我覺得有真正的大(大,我是說真的難以維護,難以理解,難以優化,很難重用,refactor..etc等)的SQL查詢我可以做到這一點,但是,除非作爲最後的手段,否則我不會這麼做。

所以我試圖想辦法用PL/SQL的所有的可能這種分裂成許多獨立的單元(也許是函數或過程)儘可能以便能夠在處理這簡單而優雅的方式......

我想一些方法來合併數據集(ref cursors可能)會解決我的問題。我已經看了一些網絡上的東西,到現在爲止,有些事情看起來有希望的,即流水線 ...雖然我不太確定那是我需要的..

綜上所述,我需要的是一些方法來編寫結果ref cursor(一個非常大的表,一列ID和大約40個其他列,每列都有關於該ID的特定位信息ID的主人。),使用很多程序,然後我可以將發送回我的服務器端應用程序並處理它。 (在這種情況下導出爲ex​​cel。)

我真的很茫然。希望有更多經驗的人可以幫助我解決這個問題。

FA

+1

好像你可以利用流水線函數返回數據和其他命名/匿名塊作爲輔助函數來計算數據。也許這會有幫助? [數據庫:流水線功能](http://stackoverflow.com/q/2889057) – Sathya 2012-02-17 04:06:38

回答

1

我不知道如果這是你想要的東西,或者你多久需要運行這個東西
但因爲它聽起來很沉重,也許你不需要的數據是最新的第二個
如果是每天一次或更少,您可以創建一個表與員工ID,
,並使用單獨的MERGE更新來計算不同領域
然後應用程序可以從該表中獲取數據
你可以有一個工作每次需要更新數據時都會計算這個值。
您可以在這裏閱讀關於合併命令wiki的信息,特別是在這裏的oracle。
由於您使用單獨的命令,您當然可以在不同的過程中進行操作,如果方便的話。
例如:

開始
執行即時 '截斷表temp_table';

insert into temp_table select emp_id from emps;

合併成一個temp_table USING ( 選擇名稱)b 上(a.emp_id = b.emp_id) WHEN然後再配 UPDATE SET a.name = b.name; ...

相關問題