为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:LINUX
【CPU】:X86
【问题描述】*:执行STR_SQL动态sql报错,语法错误看着好像没啥问题?
AS
--定义变量名
--vLastDate 当前数据库最后分区日期
vLastDate date;
--vExpectDate 当前数据库最后分区日期加 iPartitionPreserverDays天,大概3个月左右的提前数据库分区
vExpectDate date;
--vLastPartitionName 当前数据库最后分区名称
vLastPartitionName varchar(32);
--vNewLastPartitionName 新添加数据库分区名称
vNewLastPartitionName varchar(32);
--vNewLastDate 新添加数据库分区日期
vNewLastDate varchar(32);
--vLastPartitionName定义为最后的日期,静态游标vLastPartitionName结果集输出,截取'p20240801'->'20240801'
CURSOR cor1 IS select MAX(partition_name) from dba_tab_partitions where table_name=iTableName order by high_value;
--执行动态sql语句(静态sql创建过程不执行,运行过程执行即代码中检查后执行execute执行)
STR_SQL VARCHAR := 'ALTER TABLE imu.S_IMU_MSG_INFO ADD PARTITION ? VALUES LESS THAN(?)';
BEGIN
--赋值
vExpectDate :='';
vLastPartitionName :='';
--游标赋值
open cor1;
fetch cor1 into vLastPartitionName;
--截取日期
vLastDate := substr(vLastPartitionName,2);
--当前时间加iPartitionPreserverDays天
vExpectDate :=DATEADD(DAY,iPartitionPreserverDays,CURDATE);
while(vLastDate < vExpectDate) LOOP
--最后数据库日志加iPartitionIntervalDays天
vLastDate := DATEADD(DAY,iPartitionIntervalDays,vLastDate);
--拼接vNewLastPartitionName,转换为字符串
vNewLastPartitionName := CONCAT('p', to_char(vLastDate,'YYYYMMDD'));
--拼接vNewLastDate,转换为字符串
vNewLastDate:=to_char(vLastDate,'YYYY-MM-DD');
--执行sql
EXECUTE IMMEDIATE STR_SQL USING vNewLastPartitionName,vNewLastDate;
END LOOP;
END;
可以把具体的哪一行报错给说一下吗