为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:win11
【CPU】:
【问题描述】*:MYSQL存储过程如下,里面涉及到concat函数、动态表名、数据删除,插入。如何迁移到达梦上
begin
# 删除数据(本月、上月水) 因上一天数据会有变化并考虑跨月情况
set @sql_delete_water = concat(
'delete from jichugongsi_duobiaojichao_stat_measure_day_energy_deal ',
" WHERE energy_type = 'WATER'
AND billing_type = 'DAY'
and (DATE_FORMAT(measure_date, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
or DATE_FORMAT(measure_date, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 Month), '%Y-%m'))"
);
PREPARE sql_delete_water FROM @sql_delete_water;
EXECUTE sql_delete_water;
DEALLOCATE PREPARE sql_delete_water; #释放连接
# 插入数据(水)
set @sql_insert_water = concat(
"INSERT INTO rddata.jichugongsi_duobiaojichao_stat_measure_day_energy_deal (energy_type, measure_date, day_energy, billing_type, update_time)
SELECT energy_type, DATE_FORMAT(measure_date, '%Y-%m-%d'), sum(day_energy), billing_type, current_timestamp()
FROM jichugongsi_duobiaojichao_stat_measure_day_energy_", DATE_FORMAT(CURDATE(), '%Y%m'),
" WHERE energy_type = 'WATER'
AND billing_type = 'DAY'
and day_energy < 999
GROUP BY DATE_FORMAT(measure_date, '%Y-%m-%d')
union all
SELECT energy_type, DATE_FORMAT(measure_date, '%Y-%m-%d'), sum(day_energy), billing_type, current_timestamp()
FROM jichugongsi_duobiaojichao_stat_measure_day_energy_", DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 Month), '%Y%m'),
" WHERE energy_type = 'WATER'
AND billing_type = 'DAY'
and day_energy < 999
GROUP BY DATE_FORMAT(measure_date, '%Y-%m-%d')
"
);
PREPARE sql_insert_water FROM @sql_insert_water;
EXECUTE sql_insert_water;
DEALLOCATE PREPARE sql_insert_water; #释放连接
END
达梦支持concat函数,动态表名需要定义变量,执行语句使用execute 执行
1、遇到从mysql迁移存储过程和函数到DM数据库出现不兼容问题,可以先查询词函数或者存储过程从mysql到oracle的改写,因为DM数据库高度兼容oracle的语法;
2、查找不到的可以自行改写;