我的存储过程为”CREATE OR REPLACE PROCEDURE ZB_DWD.P_DWD_D_USE_BASE_INFO(
V_DATE IN VARCHAR2,
V_AREA IN VARCHAR2,
V_RETCODE OUT VARCHAR2,
V_RETINFO OUT VARCHAR2)
AUTHID CURRENT_USER
AS
/*@
****************************************************************
*名称 --%@NAME: P_DWD_D_USE_BASE_INFO
*功能描述 --%@COMMENT:用户基础信息(维度关联)
*执行周期 --%@PERIOD:日
*参数 --%@PARAM:V_DATE 日期,格式YYYYMM
*参数 --%@PARAM:V_RETCODE 过程运行结束成功与否标志
*参数 --%@PARAM:V_RETINFO 过程运行结束成功与否描述
*创建人 --%@CREATOR: liston
*创建时间 --%@CREATED_TIME:2021-11-19
*备注 --%@REMARK:
*修改记录 --%@MODIFY:
*来源表 --%@FROM:
*目标表 --%@TO:
*修改记录 --%@MODIFY:
******************************************************************
@*/
V_PKG VARCHAR2(30);
V_TAB VARCHAR2(300);
V_PROCNAME VARCHAR2(300);
V_ROWLINE NUMBER;
V_COUNT NUMBER;
V_SQL CLOB;
V_LOG_SN NUMBER;
V_DATE_A1 VARCHAR2(8);
BEGIN
V_PKG := 'DWD_D_USE_BASE_INFO'; -- 分类名称
V_TAB := 'DWD_D_USE_BASE_INFO'; -- 表名
V_PROCNAME := 'P_DWD_D_USE_BASE_INFO'; -- 过程名称
V_DATE_A1 :=TO_CHAR(TO_DATE(V_DATE,'YYYYMMDD')+1,'YYYYMMDD');
SELECT ZB_ODS.SEQ_ODS_SQLPARSER.NEXTVAL
INTO V_LOG_SN --运行日志序号
FROM DUAL;
-- 日志部分
ZB_ODS.P_INSERT_SQLPARSER_LOG_GENERAL(
V_LOG_SN,
V_DATE,
V_AREA,
'ZB_DWD',
V_PROCNAME,
'V_DATE='|| V_DATE ||';V_PROV='|| V_AREA,
SYSDATE,
V_TAB);
ZB_ODS.P_INSERT_LOG(
V_DATE,
V_PKG,
V_PROCNAME,
V_AREA,
SYSDATE,
V_TAB);
-- 条件判断1 目标分区是否存在
EXECUTE IMMEDIATE '
SELECT count(1)
FROM ALL_TAB_SUBPARTITIONS
WHERE table_name = ''DWD_D_USE_BASE_INFO''
AND table_owner = ''ZB_DWD''
AND partition_name = ''PART_'||V_DATE||'''' INTO V_COUNT;
IF V_COUNT != 11 THEN
V_SQL := 'ALTER TABLE ZB_DWD.DWD_D_USE_BASE_INFO ADD PARTITION PART_'||V_DATE||' VALUES LESS THAN ('''||V_DATE_A1||''')
TABLESPACE TBS_ZB_DWD
(
subpartition PART_'||V_DATE||'_SUBPART_01 values (''01'') tablespace TBS_ZB_DWD,
subpartition PART_'||V_DATE||'_SUBPART_02 values (''02'') tablespace TBS_ZB_DWD,
subpartition PART_'||V_DATE||'_SUBPART_03 values (''03'') tablespace TBS_ZB_DWD,
subpartition PART_'||V_DATE||'_SUBPART_04 values (''04'') tablespace TBS_ZB_DWD,
subpartition PART_'||V_DATE||'_SUBPART_05 values (''05'') tablespace TBS_ZB_DWD,
subpartition PART_'||V_DATE||'_SUBPART_06 values (''06'') tablespace TBS_ZB_DWD,
subpartition PART_'||V_DATE||'_SUBPART_07 values (''07'') tablespace TBS_ZB_DWD,
subpartition PART_'||V_DATE||'_SUBPART_08 values (''08'') tablespace TBS_ZB_DWD,
subpartition PART_'||V_DATE||'_SUBPART_09 values (''09'') tablespace TBS_ZB_DWD,
subpartition PART_'||V_DATE||'_SUBPART_10 values (''10'') tablespace TBS_ZB_DWD,
subpartition PART_'||V_DATE||'_SUBPART_11 values (''11'') tablespace TBS_ZB_DWD
)
';
EXECUTE IMMEDIATE V_SQL;
END IF;
-- 条件判断2 - 源数据是否存在
EXECUTE IMMEDIATE '
SELECT SUM(CNT) FROM
(
SELECT count(1) CNT
FROM ZB_ODS.ODS_D_USE_BASE_INFO
WHERE date_id ='''|| V_DATE ||'''
AND area_id ='''|| V_AREA ||'''
AND rownum < 2
union all
SELECT count(1)
FROM ZB_DIM.DIM_AREA_ID
WHERE rownum < 2
union all
SELECT count(1)
FROM ZB_DIM.DIM_SERVICE_TYPE
WHERE rownum < 2
)
'
into
V_COUNT;
IF V_COUNT = 3
THEN
--ddl语句必须使用动态sql
V_SQL := 'ALTER TABLE ZB_DWD.DWD_D_USE_BASE_INFO TRUNCATE SUBPARTITION PART_'|| V_DATE ||'_SUBPART_'|| V_AREA ;
--dml语句可以不使用动态sql 但是前面ddl使用了动态 尽量相同
EXECUTE IMMEDIATE V_SQL;
V_SQL := 'INSERT INTO ZB_DWD.DWD_D_USE_BASE_INFO NOLOGGING
SELECT T0.DATE_ID,
T0.AREA_ID,
DECODE(T0.AREA_ID,''02'',''晋中市'',''06'',''吕梁市'',''08'','''''',T1.AREA_DESC),
T0.USER_ID,
T0.DEVICE_NUMBER,
T0.SERVICE_TYPE,
T2.SERVICE_TYPE_DESC,
T0.INNET_DATE,
T0.INNET_MONTHS
FROM ZB_ODS.ODS_D_USE_BASE_INFO T0,
ZB_DIM.DIM_AREA_ID T1,
ZB_DIM.DIM_SERVICE_TYPE T2 --左关联
WHERE T0.AREA_ID=T1.AREA_ID(+) --t0和t1左关联
AND T0.SERVICE_TYPE= T2.SERVICE_TYPE(+) --t0和t2左关联
AND T0.DATE_ID='''|| V_DATE ||'''
AND T0.AREA_ID='''|| V_AREA ||'''';
EXECUTE IMMEDIATE V_SQL;
V_ROWLINE := SQL%ROWCOUNT;
COMMIT;
V_RETCODE := 'SUCCESS';
V_RETINFO := '结束';
ELSE
V_RETCODE := 'WAIT';
V_RETINFO := '等待数据';
END IF;
-- 更新执行结果
ZB_ODS.P_UPDATE_LOG(
V_DATE,
V_PKG,
V_PROCNAME,
V_AREA,
V_RETINFO,
V_RETCODE,
SYSDATE,
V_ROWLINE);
ZB_ODS.P_UPDATE_SQLPARSER_LOG_GENERAL(
V_LOG_SN,
V_RETCODE,
V_RETINFO);
EXCEPTION WHEN OTHERS THEN
V_RETCODE := 'FAIL';
V_RETINFO := SQLERRM;
ZB_ODS.P_UPDATE_LOG(
V_DATE,
V_PKG,
V_PROCNAME,
V_AREA,
V_RETINFO,
V_RETCODE,
SYSDATE,
V_ROWLINE);
ZB_ODS.P_UPDATE_SQLPARSER_LOG_GENERAL(
V_LOG_SN,
V_RETCODE,
V_RETINFO);
END;
“他的状态为valid 之后我运行了循环调用”DECLARE
V_DATE VARCHAR2(8) := '20200818';
V_1 VARCHAR2(1000);
V_2 VARCHAR2(1000);
BEGIN
WHILE to_date(V_DATE,'yyyymmdd') BETWEEN to_date('20230515','yyyymmdd') - 1000 AND to_date('20230515','yyyymmdd') - 991 LOOP
FOR T IN (SELECT AREA_ID FROM ZB_DIM.DIM_AREA_ID) LOOP
ZB_DWD.P_DWD_D_USE_BASE_INFO(V_DATE, T.AREA_ID, V_1, V_2);
END LOOP;
V_DATE := to_char(to_date(V_DATE,'yyyymmdd') + 1,'yyyymmdd');
END LOOP;
END;"但是“SELECT DATE_ID,area_id,COUNT(*) FROM ZB_DWD.DWD_D_USE_BASE_INFO GROUP BY DATE_ID,area_id;”的表中没有数据查看日志“SELECT * FROM ZB_ODS.ODS_EXECUTE_LOG WHERE acct_month='20200818' ;”显示ORA-00907: 缺失右括号
最新发布