日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle如何手工执行job,求助高手,JOB执行和手工执行执行结果不同,JOB执行不出来,手工却没问题...

發布時間:2023/12/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle如何手工执行job,求助高手,JOB执行和手工执行执行结果不同,JOB执行不出来,手工却没问题... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

求助:JOB執行異常,手工執行沒問題。這個存儲過程實現按相關維度聚集明細數據(按月);之后,從1月-12月,依次向上補充當期未發生數據(累計值補0) 。問題是,這個存儲過程,手工執行沒問題,每次通過JOB調用,執行到第二部補充數據的按月雙層循環,就卡住了。卡在第一次循環,COMMIT總是不執行。試圖跟蹤SQL,但是總是跟蹤不到,服務器沒有標識的trace文件生成。跟蹤SQL這個問題如果手工執行這個過程的話也沒問題。。。。期間,查看alert文件,沒有錯誤記錄。存儲過程本身也沒有異常拋出。 數據庫服務器是ORACLE 9I的。插入數據的目標表按月分區的。插入新數據之前,跑循環刪除兩年內的所有數據所在分區。

FUNCTION F_ETL_M1_SB_SP_JL_MX_Y(AN_YEARS NUMBER) RETURN NUMBER IS

LN_RETURN? ?NUMBER;

LVC_BBQ_MAX VARCHAR2(6);

LVC_SQLSTR??VARCHAR2(100);

BEGIN

SELECT SYSDATE INTO ldt_zxsj_q FROM DUAL;

--LN_RETURN := F_ETL_INDEX_REBUILD('M1_SB_SPXX_JL_MX_Y', 0);

LVC_SQLSTR := 'ALTER SESSION SET SQL_TRACE = TRUE';

EXECUTE IMMEDIATE LVC_SQLSTR;

LVC_SQLSTR := 'ALTER SESSION SET TRACEFILE_IDENTIFIER = ' ||

'''yuanchh_test_131029''';

EXECUTE IMMEDIATE LVC_SQLSTR;

FOR REC_ND IN 1 .. AN_YEARS LOOP

FOR REC_YF IN 1 .. 12 LOOP

LVC_FQXH? ?:= (TO_CHAR(SYSDATE, 'YYYY') - REC_ND + 1) ||

LPAD(REC_YF, 2, '0');

LVC_SQLSTR := 'ALTER TABLE M1_SB_SPXX_JL_MX_Y TRUNCATE PARTITION ' ||

'PART' || LVC_FQXH;

EXECUTE IMMEDIATE LVC_SQLSTR;

END LOOP;

END LOOP;

--1、抽取每月發生數據

FOR REC_ND IN 1 .. AN_YEARS LOOP

INSERT

INTO M1_SB_SPXX_JL_MX_Y NOLOGGING

(BBQ,

NSRDZDAH,

HYMX_DM,

DJZCLX_DM,

SKSS_SWJG_DM,

NSR_SWJG_DM,

SE_BQ,

SE_BQLJ,

BBQ_TQ,

NSRSBH,

NSRMC,

HYMX_DM_BI,

SJLY) /* NSR_SWJG_NOW*/

SELECT /*+ PARALLEL(a,8) */

A.BBQ,

A.NSRDZDAH,

MAX(A.HYMX_DM),

MAX(A.DJZCLX_DM),

A.SKSS_SWJG_DM,

A.NSR_SWJG_DM,

SUM(A.SE) SE_BQ,

SUM(SUM(A.SE)) OVER(PARTITION BY SUBSTR(A.BBQ, 1, 4), A.NSRDZDAH, /*A.HYMX_DM, A.DJZCLX_DM,*/ A.SKSS_SWJG_DM, A.NSR_SWJG_DM ORDER BY SUBSTR(A.BBQ, 5, 6) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) SE_BQLJ,

A.BBQ - '100' BBQ_TQ, --數據抽取用

MAX(A.NSRSBH),

MAX(A.NSRMC),

MAX(A.HYMX_DM_BI),

'1'

FROM M1_SB_SPXX_DH_MX_Y A --, DIM_HY B

WHERE /*A.HYMX_DM = B.HY_DM_SJ(+)

AND */A.BBQ >= (TO_CHAR(SYSDATE, 'YYYY') - REC_ND + 1) || '01'

AND A.BBQ <= (TO_CHAR(SYSDATE, 'YYYY') - REC_ND + 1) || '12'

GROUP BY A.BBQ,

A.NSRDZDAH,

--A.HYMX_DM,??--CHANGED @20131027

--A.DJZCLX_DM,

A.SKSS_SWJG_DM,

A.NSR_SWJG_DM;

COMMIT;

END LOOP;

COMMIT;

--2、按數據粒度補齊各月未發生數據的累計值(當期值補0),補到當前發生數據的最大月為止

SELECT MAX(T.BBQ)

INTO LVC_BBQ_MAX

FROM M1_SB_SPXX_DH_MX_Y T

WHERE T.BBQ <= TO_CHAR(SYSDATE, 'YYYYMM');

FOR REC_ND IN 1 .. AN_YEARS LOOP

FOR REC_YF IN 1 .. 11 LOOP

INSERT /*+append*/ INTO M1_SB_SPXX_JL_MX_Y nologging

(BBQ,

NSRDZDAH,

HYMX_DM,

DJZCLX_DM,

SE_BQ,

SE_TQ,

SKSS_SWJG_DM,

NSR_SWJG_DM,

SE_BQLJ,

SE_SNTQLJ,

NSRSBH,

NSRMC,

HYMX_DM_BI,

TBZF_DY,

TBZF_LJ,

SJLX,

BBQ_TQ,

NSR_SWJG_NOW,

SJLY)

SELECT /*+full(t)*/

(TO_CHAR(SYSDATE, 'YYYY') - REC_ND + 1) ||

LPAD((REC_YF + 1), 2, '0') BBQ,

NSRDZDAH,

HYMX_DM,

DJZCLX_DM,

0 SE_BQ,

0 SE_TQ,

SKSS_SWJG_DM,

NSR_SWJG_DM,

SE_BQLJ,

0 SE_SNTQLJ,

NSRSBH,

NSRMC,

HYMX_DM_BI,

TBZF_DY,

TBZF_LJ,

SJLX,

(TO_CHAR(SYSDATE, 'YYYY') - REC_ND + 1) ||

LPAD((REC_YF + 1), 2, '0') - '100' BBQ_TQ,

NSR_SWJG_NOW,

'0' SJLY --'0'標識為補的數據

FROM M1_SB_SPXX_JL_MX_Y T

WHERE T.BBQ = (TO_CHAR(SYSDATE, 'YYYY') - REC_ND + 1) ||

LPAD(REC_YF, 2, '0')

AND T.BBQ <= LVC_BBQ_MAX

AND NOT EXISTS

(SELECT /*+full(b)*/1

FROM M1_SB_SPXX_JL_MX_Y B

WHERE B.NSRDZDAH = T.NSRDZDAH

--AND B.HYMX_DM = T.HYMX_DM??--CHANGED @20131027

--AND B.DJZCLX_DM = T.DJZCLX_DM

AND B.SKSS_SWJG_DM = T.SKSS_SWJG_DM

AND B.NSR_SWJG_DM = T.NSR_SWJG_DM

AND B.BBQ = (TO_CHAR(SYSDATE, 'YYYY') - REC_ND + 1) ||

LPAD((REC_YF + 1), 2, '0'));

COMMIT;

END LOOP;

END LOOP;

PKG_GY.P_GY_WRITE_ETL_LOG(lvc_etl,

'F_ETL_M1_SB_SP_JL_MX_Y',

lvc_zxjg,

ldt_zxsj_q,

sysdate,

'01',

null);

RETURN 0;

EXCEPTION

WHEN OTHERS THEN

PKG_GY.P_GY_WRITE_ETL_LOG(lvc_etl,

'F_ETL_M1_SB_SP_JL_MX_Y',

lvc_zxjg_err,

ldt_zxsj_q,

sysdate,

'01',

substr(TO_CHAR(SQLCODE) || SQLERRM, 1, 500));

RETURN 1;

END F_ETL_M1_SB_SP_JL_MX_Y;

總結

以上是生活随笔為你收集整理的Oracle如何手工执行job,求助高手,JOB执行和手工执行执行结果不同,JOB执行不出来,手工却没问题...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。