簡體   English   中英

每周計算一個表中多行的總和並將其寫入另一個表

[英]Calculate the SUM of multiple rows from one table and have it written to another table, weekly

我不是一個有經驗的 SQL 編碼員,並且可以邊走邊學。 我有一項需要每周自動執行的任務。 這項工作有幾個部分:

1)從幾列計算多行的總和。

select SUM(TOTAL_COST) from TABLE_1 and select SUM(TOTAL_HOURS) from TABLE_1

2) 將 TABLE_1 中的 2 個 SUM 寫入 TABLE_2 中的 2 列。

我們將這些列稱為:表_2 中的 SUM_OF_COST 和 SUM_OF_HOURS

3)這項工作需要每周執行一次。

BEGIN
  DBMS_SCHEDULER.SET_ATTRIBUTE (
  name         =>  'update_job',
   attribute    =>  'repeat_interval',
   value        =>  'freq=weekly; byday=wed');
END;
/

上面的代碼只是我對我認為會使用什么的理解。 我知道我必須將上述前 2 個步驟的整個工作寫入一個包? 我假設我會在工作中引用該包(第 3 步)。 我需要關於如何寫這篇文章的幫助。 SUM 是否需要先寫入另一列,然后才能寫入 TABLE_2,還是可以計算 SUM 然后將值寫入 TABLE_2 而不將該值存儲在 TABLE_1 中? 如何將代碼拼湊起來進行計算,然后寫入第二個表? 任何幫助將不勝感激。 謝謝!

你是在正確的方式。

您需要創建一個每周執行的procedure

CREATE OR REPLACE PROCEDURE sum_weekly IS
BEGIN
 INSERT INTO TABLE_2(SUM_OF_COST ,SUM_OF_HOURS ) (SELECT SUM(cost),SUM(hour) FROM TABLE_1)
 COMMIT;
END;

更多關於插入選擇語法

然后你需要創建時間表

BEGIN
 DBMS_SCHEDULER.CREATE_JOB (
  job_name             => 'my.sum_weekly.schedule',
  job_type             => 'PLSQL_BLOCK',
  job_action           => 'BEGIN sum_weekly(); END;',
  start_date           =>  sysdate,
  repeat_interval      => 'FREQ=WEEKLY', 
  enabled              =>  TRUE,
  comments             => 'Gather table statistics from Table 1 to Table 2');
END;

repeat_interval示例。

FREQ=HOURLY;INTERVAL=4
every 4 hour
FREQ=HOURLY;INTERVAL=4;BYMINUTE=10;BYSECOND=30
every 4 hours, 10 minutes, 30 seconds of;
FREQ=YEARLY;BYYEARDAY=-276
every 31 th March;
FREQ=YEARLY;BYMONTH=MAR;BYMONTHDAY=31
every 31 th March;

檢查正確的設置interval

DECLARE   next_run_date   TIMESTAMP;
BEGIN
 DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING (
 'FREQ=HOURLY;INTERVAL=4;BYMINUTE=10;BYSECOND=30'
 ,SYSTIMESTAMP
 ,NULL
 ,next_run_date) ;
DBMS_OUTPUT.PUT_LINE ( 'next_run_date: ' || next_run_date );
END;

要查看您的時間表,請使用以下查詢:

SELECT job_name, state, enabled FROM user_scheduler_jobs;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM