首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Oracle 存儲過程結合 JOB 實現每小時自動統計流量總和

     編輯:程式設計綜合問答

需求

每小時統計表 A 中 FLOW 欄位總和,寫入表 B 的 FLOW_SUM 欄位。

實作步驟

  1. 建立存儲過程:
CREATE OR REPLACE PROCEDURE proc_flow_sum IS
BEGIN
    MERGE INTO table_b b
    USING (SELECT SUM(flow) AS total_flow FROM table_a) a
    ON (1=1) -- 假設 B 只有一列統計資料,或依主鍵關聯
    WHEN MATCHED THEN UPDATE SET b.flow_sum = a.total_flow
    WHEN NOT MATCHED THEN INSERT (flow_sum) VALUES (a.total_flow);
    COMMIT;
END;
/
  1. 建立 JOB 排程(Oracle 10g+ 建議用 DBMS_SCHEDULER):
BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
        job_name        => 'JOB_FLOW_SUM_HOURLY',
        job_type        => 'STORED_PROCEDURE',
        job_action      => 'PROC_FLOW_SUM',
        start_date      => SYSTIMESTAMP,
        repeat_interval => 'FREQ=HOURLY; INTERVAL=1',
        enabled         => TRUE,
        comments        => '每小時統計 FLOW 總和'
    );
END;
/

驗證

SELECT * FROM USER_SCHEDULER_JOBS WHERE JOB_NAME = 'JOB_FLOW_SUM_HOURLY';
SELECT * FROM USER_SCHEDULER_JOB_RUN_DETAILS WHERE JOB_NAME = 'JOB_FLOW_SUM_HOURLY' ORDER BY LOG_DATE DESC;

注意

  • 確保執行 JOB 的用戶擁有 CREATE JOB 權限及對表的 DML 權限。
  • 若表 B 有多筆資料,請在 MERGE 的 ON 條件加入正確關聯鍵。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved