【问题描述】

在将 Oracle 表结构迁移到 YashanDB 并执行插入操作时,遇到以下报错:

SQL 错误 [13] [22000]: [line: 0 column: 0] YAS-00013 value is larger than INTEGER allowed

同样的数据在 Oracle 中插入无误,在 YashanDB 中却无法通过。这是为什么?

image.png
image.png
【问题分析】

数据类型差异是根本原因

在 Oracle 中,INT 实际上并不是标准数据类型,而是很多开发工具对 NUMBER 类型的映射结果;

NUMBER 在 Oracle 中可以容纳非常大的整数,而 INT 在 YashanDB 中是严格遵守 ANSI SQL 标准的整数类型。

image.png
标准 INT 范围有限

在 YashanDB 中:


INT 范围为:-2.147.483.648 到 2.147.483.647(32 位)

image.png

如果你插入的数据是 16 位数字,如:

9999999999999999
它远远超出了 INT 的表示范围,自然触发溢出报错。

【受影响版本】

YashanDB 所有版本

【解决办法】

修改字段类型

请将字段类型从 INT 修改为:

BIGINT(支持最大 64 位整型)

或 NUMBER(更通用的数值类型,兼容 Oracle 行为)

示例:

-- 推荐使用
CREATE TABLE example (
  id NUMBER
);
或
CREATE TABLE example (
  id BIGINT
);

建议在迁移工具中设置类型映射规则:

确保 Oracle 的 NUMBER 类型不要被误映射为 INT。

【小结建议】

Oracle 的 INT ≠ YashanDB 的 INT,迁移需特别留意;

对于 ID、流水号等大数字字段,统一推荐使用 NUMBER 或 BIGINT;

可结合 YMP 或工具脚本增加字段类型兼容性检查逻辑,避免批量迁移后插入失败。


数据库砖家
1 声望0 粉丝