迁移:mysql迁移dm8问题处理

发布时间 2023-09-09 13:20:56作者: 万物皆可rua

问题1

表[xxxxx]中不能同时包含聚集KEY和大字段

处理方法

sp_set_para_value(1,'PK_WITH_CLUSTER',0);
将迁移工具退回输入DM用户名密码的页面再继续下一步,或者关闭当前迁移窗口重新打开迁移任务(PK_WITH_CLUSTER是会话级参数,直接重试会因为本会话的参数未生效而依然报错)

问题2

第 45 行, 第 1 列[GET]附近出现错误: 语法分析出错

处理方法

注释获取异常信息的SQL代码,调用输出错误日志存储过程时,异常信息的参数直接使用SQLCODE与SQLERRM(DM8内置)

原语句

EXCEPTION
WHEN SQLEXCEPTION THEN
BEGIN
GET DIAGNOSTICS CONDITION 1 V_RETURN_CODE = RETURNED_SQLSTATE , V_ERROR_MSG = MESSAGE_TEXT;
CALL ETL.EDW_PROC_ERROR_LOG(V_ACCT_ID,V_START_TIME,NOW(),V_PROC_NAME,V_STEP_ID, V_RETURN_CODE, V_ERROR_MSG);
SET P_RESULT = 1;
END;
END

修改后

EXCEPTION
WHEN SQLEXCEPTION THEN
BEGIN
CALL ETL.EDW_PROC_ERROR_LOG(V_ACCT_ID,V_START_TIME,NOW(),V_PROC_NAME,V_STEP_ID, SQLCODE, SQLERRM);
SET P_RESULT = 1;
END;
END

问题3

第 1 行, 第 102 列[UNSIGNED]附近出现错误: 语法分析出错

处理方法

mysql的INT UNSIGNED的范围类型是0~4294967295,如果应用里面整数范围不超过2147483647就可以用int,如果超过2147483647就用bigint
此处原类型是TINYINT,范围0~255,因此使用int

原语句

CREATE PROCEDURE "adm"."p_wb_cashcheck_declaration_dw"( sDataDate IN CHAR(8) , iResult OUT TINYINT UNSIGNED ) AS
……

修改后

CREATE PROCEDURE "adm"."p_wb_cashcheck_declaration_dw"( sDataDate IN CHAR(8) , iResult OUT INT ) AS
……

问题4

第 47 行, 第 31 列[ENTRY_DATE]附近出现错误: 语法分析出错
第 121 行, 第 73 列[12]附近出现错误: 语法分析出错

处理方法

原语句

SELECT DATE('2023-03-01') + INTERVAL ENTRY_DATE DAY;
SELECT SUBSTR(REPLACE(DATE_SUB(V_DATES,INTERVAL 2 MONTH),'-',''),1, 6);

修改后

SELECT TO_DATE('2023-03-01') + NUMTODSINTERVAL(ENTRY_DATE,'DAY');
SELECT SUBSTR(REPLACE(DATE_SUB(V_DATES,NUMTOYMINTERVAL(2,'MONTH')),'-',''),1, 6);

问题5

第 28 行, 第 22 列[:=]附近出现错误: 语法分析出错

处理方法

达梦为查询结果集生成临时序列可以使用rownum

原语句

SELECT a.*,( i:= i+1) num FROM

修改后

SELECT a.*,rownum num FROM