欢迎访问 生活随笔!

生活随笔

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

编程问答

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

发布时间:2023/12/19 编程问答 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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执行不出来,手工却没问题...的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。