PL/SQL也是一門語言,後臺開發常常會用到。spring
目前作要到一個功能,關於「報表任務調度」,說明白了就是作幾張報表,天天統計一次新數據,用於在PC頁面上顯示,我苦思冥想了幾天,總結出三種方案。sql
開發環境:SSM+oracle(spring,spring MVC,mybatis + oracle)。mybatis
1、在pl/sql上,每張報表開發一個對應的儲存過程,每一個存儲過程新建一個DBMS_JOB,按相關需求定時執行。oracle
2、在pl/sql上,每張報表開發一個對應的儲存過程,新建一張「報表信息表」,用於保存存儲過程信息;緊接着新建額外的存儲過程「報表任務調度過程」,在此存儲過程裏調用報表對應的存儲過程,經過spring的定時任務(quartz)去定時調用存儲過程「報表任務調度過程」。spa
備註:在存儲過程==》「報表任務調度過程」調用報表存儲過程以下開發
V_COMMAND := 'BEGIN ' || V_RPT_PRO || '; END;'; (假設已經聲明 V_COMMAND VARCHAR2(300);)
EXECUTE IMMEDIATE V_COMMAND
USING IN param1, OUT V_param2, OUT V_param1, OUT V_param2; --參數類型和傳遞順序必須與存儲過程當中的保持一致
效率
3、在pl/sql上,新建一個package,package bady裏面開發報表對應的儲存過程,加載到main裏面,新建一個DBMS_JOB,定時執行JOB。後臺
分析一下:配置
第一種方案比較容易理解,但比較麻煩,也很差維護。定時任務
第二種方案,流程是:spring調用「報表任務調度過程」,「報表任務調度過程」調用報表的存儲過程,這樣就不用新建DBMS_JOB,還能根據傳入的參數來決定什麼時候調用哪個報表的存儲過程,只要修改spring配置就能修改經常使用業務,便於管理,功能和業務也很好拓展和維護。
第三種方案,用包和統一管理存儲過程,也比較好維護和拓展,並且只須要新建一個JOB來調用MAIN便可,在開發效率,管理和維護上,也是一種不錯的選擇。
分析完以上三種方案以後,根據現實狀況,決定用第二種方案,理由是:系統是的B/S模式,不少功能都須要在頁面上進行操做和管理,用第二種方案能夠很直觀的進行維護和管理。