【问题现象】
在将一张 Oracle 表迁移至 YashanDB 后,执行插入操作时报如下错误:
SQL 错误 [13] [22000]: [line: 0 column: 0] YAS-00013 value is larger than INTEGER allowed
而在 Oracle 中相同语句执行无误。为什么?
【根本原因】
这其实是 字段类型默认映射差异 所致。
- INT 类型的最大值有限
YashanDB 遵循标准 SQL 类型规范:
INT 类型的取值范围为:
-2,147,483,648 ~ 2,147,483,647
而报错中的数值是 16 位长整型,显然超出了 INT 类型的表示范围。
- Oracle 的 INT ≠ 标准 INT
虽然 Oracle 中也支持 INT 写法,但实际上它会自动映射为 NUMBER 类型,精度更高,因此在 Oracle 中可以插入更大的整数。
例如:
-- 实际上这在 Oracle 中是等价于:
CREATE TABLE t_test (id NUMBER);
【解决方法】
修改字段类型为 BIGINT 或 NUMBER
为了兼容大整数建议统一使用以下字段定义:
-- 推荐写法
CREATE TABLE t_test (
id NUMBER -- 或者使用 BIGINT
);
避免使用 INT 类型,尤其是在可能接收超过 10 位整数的场景中。
【迁移建议】
在从 Oracle 向 YashanDB 迁移时:
建议在迁移前,使用工具或脚本自动识别并调整超范围字段,避免插入报错。
【影响版本】
适用于 YashanDB 所有版本
【总结】
YashanDB 中 INT 是严格 32 位整数;
Oracle 的 INT 实际上通常是 NUMBER,支持大整数;
避免直接照搬字段类型,迁移时应注意数据精度范围;
建议统一使用 NUMBER 类型接收未知位数的整型字段。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。