为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:V8
【操作系统】:Kylin Linux Advanced Server V10 (Lance)
【CPU】:AMD EPYC Processor
【问题描述】*:存储过程中创建新分区后再往表中插入数据,报错-7184:对象定义被修改,版本检查失败
————————
查社区论坛后改为动态sql执行insert语句后可以解决。因为insert语句较长且其中含有较多变量,用动态sql写代码涉及到变量拼接、字符转义,不方便维护,想请教一下DM是否有类似HIVE的动态分区(sethive.exec.dynamic.partition)这样的参数可以设置以解决此类问题
——————
以下为报错部分代码供参考
--月初添加分区,删除前13个月分区
IF V_MONTH_BEGIN_FLAG = '1' THEN
V_SQL := 'ALTER TABLE CRM.CUST_ALG_SUM_P DROP PARTITION IF EXISTS '||V_PAR_ADD; --删除本月分区(支持重跑)
EXECUTE IMMEDIATE V_SQL;
V_STEP := V_STEP+1;
V_LOG_MSG := V_STEP||'删除本月分区'||V_PAR_ADD||'(支持重跑)';
CRM.PRC_STEP_LOGS(V_PRC_NAME,V_PRC_DESC,INDATE,V_LOG_MSG);
V_SQL := 'ALTER TABLE CRM.CUST_ALG_SUM_P ADD PARTITION '||V_PAR_ADD||' VALUES LESS THAN ('||V_NEXT_MTH_BEN||')'; --新增本月分区
EXECUTE IMMEDIATE V_SQL;
V_STEP := V_STEP+1;
V_LOG_MSG := V_STEP||'新增本月分区'||V_PAR_ADD;
CRM.PRC_STEP_LOGS(V_PRC_NAME,V_PRC_DESC,INDATE,V_LOG_MSG);
V_SQL := 'ALTER TABLE CRM.CUST_ALG_SUM_P DROP PARTITION IF EXISTS '||'V_PAR_DEL'; --删除前13个月分区
EXECUTE IMMEDIATE V_SQL;
V_STEP := V_STEP+1;
V_LOG_MSG := V_STEP||'删除前13个月分区'||V_PAR_DEL;
CRM.PRC_STEP_LOGS(V_PRC_NAME,V_PRC_DESC,INDATE,V_LOG_MSG);
END IF;
--开始插入数据
V_STEP=V_STEP+1;
V_LOG_MSG :=V_STEP||':开始插入零售客户指标日统计表数据';
CRM.PRC_STEP_LOGS(V_PRC_NAME,V_PRC_DESC,INDATE,V_LOG_MSG);
INSERT INTO CRM.CUST_ALG_SUM_P
(
CUST_ID -- 01 客户编号
,ASET_BAL -- 02 金融资产余额
,ASET_YAVG -- 03 金融资产年日均
,ASET_QAVG -- 04 金融资产季日均
。。。。。。。。。。
把增删分区的代码提取出来,提前单独执行,然后再执行业务代码就不会报错