Orcel存盤程序,每天運行一次,日志顯示每天都運行成功,但是不知道為什么每個月的最后兩天資料不更新,為什么呢?求知道的大神幫助解答,感謝感謝!
一、開頭變數設定如下:
V_STARTPRO_TIME DATE;
V_START_DATE DATE;
V_SQL VARCHAR2(1000);
V_ERROR_MSG VARCHAR2(300); --錯誤訊息
BEGIN
V_STARTPRO_TIME := SYSDATE;
V_START_DATE := TRUNC(SP_STARTDATE);
SELECT MDATE1
INTO V_START_DATE
FROM DW_BI.DIM_TIME
WHERE TDATE = V_START_DATE;
V_SQL := 'TRUNCATE TABLE FACT_CRM_DEAL_RATE_TMP';
EXECUTE IMMEDIATE V_SQL;
COMMIT;
二、資料運行如下:
INSERT INTO FACT_CRM_DEAL_RATE_TMP
WITH RIQI AS
(SELECT MIN(D.MDATE1_STAT) STA_DATE, MAX(D.MDATE1_END) END_DATE
FROM DIM_TIME D
WHERE D.MDATE1 = V_START_DATE)
SELECT E.CUSTOMER_NO, D.MDATE1
FROM ODS_CRM.TEMP_JC_ENQUIRY E
LEFT JOIN DIM_TIME D
ON TRUNC(E.CREATE_TIME) = D.TDATE
WHERE E.CREATE_TIME >= (SELECT STA_DATE FROM RIQI)
AND E.CREATE_TIME <= (SELECT END_DATE + 1 FROM RIQI)
AND E.ENQUIRY_STATE = '5');
commit;
三、結尾引數賦值如下:
--洗掉正式表的當月資料
DELETE FROM FACT_CRM_DEAL_RATE A WHERE A.MDATE1 = V_START_DATE;
COMMIT;
--插入臨時表資料至正式表
INSERT INTO FACT_CRM_DEAL_RATE
SELECT * FROM FACT_CRM_DEAL_RATE_TMP;
COMMIT;
uj5u.com熱心網友回復:
估計是資料運行那段有問題,你也沒貼全。你可以模擬是當月的最后2天,來試著把存盤程序中除了最后洗掉資料和插入資料外的其他代碼跑一遍試試,看看臨時表中為啥沒有資料。用函式賦值系統日期的地方,就直接把日期值寫死。
uj5u.com熱心網友回復:
謝謝您的解答,可是資料運行部分即代碼正文這里,當將日期寫死,單獨查詢都沒有問題,月份整月的資料和每月后兩天的資料可以正常查詢到正確的結果,但是查詢該存盤程序生成的表時,因為是按月份匯總的,查詢出來月匯總中總是缺少每月后兩天的資料;所以我才懷疑是跑存盤程序的時候,每個月后兩天并沒有運行存盤程序,但是日志表里面還顯示運行成功,這是為什么呢?
uj5u.com熱心網友回復:
沒怎么用過ORACLE,不知道你運行存盤程序是通過作業呼叫的,還是其他方法,是不是呼叫的觸發有問題。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/11375.html
標籤:應用實例
上一篇:Ssms.exe啟動一會后閃退
下一篇:sql2008拉檔案無法正確顯示
