注册
【知识标题】Oracle迁移达梦DM报错:-3328 第12行附近错误[-6105]数据类型不匹配
专栏/技术分享/ 文章详情 /

【知识标题】Oracle迁移达梦DM报错:-3328 第12行附近错误[-6105]数据类型不匹配

mbj 2026/04/24 27 0 0
摘要

【知识编号】DM-20260421-001
【适用DM版本】v8.1.4.116
【适用场景】Oracle至DM数据迁移(函数/包迁移)
【前置条件】已完成相关数据备份

问题现象/需求描述

  1. 具体报错现象
    Oracle自建函数包通过DTS工具迁移无报错,但迁移后包体编译失败。
    报错信息:
    -3328:第12 行附近出现错误[-6105]:数据类型不匹配
    [-3328]:包/对象[PKG_TEST]主体解析出错

  2. 补充说明:无

原因分析

  1. 核心原因:时间类型迁移后行为变化
  • Oracle 原生行为
    DATE 类型相减 直接返回数字(天数),可以直接使用 SUM() 聚合函数。
  • DTS 迁移规则
    Oracle DATE/DATETIME/TIMESTAMP 统一迁移为 DM TIMESTAMP
  • DM 行为
    TIMESTAMP 相减返回 INTERVAL 类型无法直接 SUM,导致原有SQL语法报错。
  1. 问题SQL定位
select sum(last_day - first_day + 1) FROM timetable;

解决方案/操作步骤

操作内容:修改PACKAGE创建语句,适配DM时间运算语法

方法一(截断时分秒,适合整点日期)

sum(cast(last_day as date) - cast(first_day as date) + 1)

方法二(精确等价,无精度丢失)

SUM(DATEDIFF(SECOND, first_day, last_day) / 86400.0 + 1)

验证方法

  1. 使用修改后的SQL重新编译PACKAGE包
  2. 预期结果:-3328、-6105报错消失,包编译成功

注意事项

  1. 执行修改前必须备份相关数据与表空间,避免数据丢失。

PS:个人知识库记录,内容若有错漏之处,欢迎指正。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服