【问题描述】
在将 Oracle 表结构迁移到 YashanDB 并执行插入操作时,遇到以下报错:
SQL 错误 [13] [22000]: [line: 0 column: 0] YAS-00013 value is larger than INTEGER allowed
同样的数据在 Oracle 中插入无误,在 YashanDB 中却无法通过。这是为什么?
【问题分析】
数据类型差异是根本原因
在 Oracle 中,INT 实际上并不是标准数据类型,而是很多开发工具对 NUMBER 类型的映射结果;
NUMBER 在 Oracle 中可以容纳非常大的整数,而 INT 在 YashanDB 中是严格遵守 ANSI SQL 标准的整数类型。
标准 INT 范围有限
在 YashanDB 中:
INT 范围为:-2.147.483.648 到 2.147.483.647(32 位)
如果你插入的数据是 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 或工具脚本增加字段类型兼容性检查逻辑,避免批量迁移后插入失败。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。