数值字段溢出异常
Numeric field overflow exception
我应该如何重写我的插入语句?
CREATE TABLE test_table (
rate decimal(16,8)
);
INSERT INTO test_table VALUES (round(3884.90000000 / 0.00003696, 8));
异常:
ERROR: numeric field overflow
SQL state: 22003
Detail: A field with precision 16, scale 8 must round to an absolute value less than 10^8. Rounded overflowing value: 105110930.73593074
数据库:Greenplum Database 4.3.8.0 build 1(基于 PostgreSQL 8.2.15)
你应该使用小数(17,8)
CREATE TABLE test_table
(
rate decimal(17,8)
);
使用以下格式的小数
decimal(precision, scale)
1) 一个数值的精度是整数中有效位数的总数,即小数点两边的位数
2) 数字的小数位数是小数部分小数点右边的小数位数
由于插入语句的结果是 105110930.73593074,总位数是 17,小数点后是 8,所以你应该使用 decimal(17,8)
Select (round(3884.90000000 / 0.00003696, 8));
我应该如何重写我的插入语句?
CREATE TABLE test_table (
rate decimal(16,8)
);
INSERT INTO test_table VALUES (round(3884.90000000 / 0.00003696, 8));
异常:
ERROR: numeric field overflow
SQL state: 22003
Detail: A field with precision 16, scale 8 must round to an absolute value less than 10^8. Rounded overflowing value: 105110930.73593074
数据库:Greenplum Database 4.3.8.0 build 1(基于 PostgreSQL 8.2.15)
你应该使用小数(17,8)
CREATE TABLE test_table
(
rate decimal(17,8)
);
使用以下格式的小数
decimal(precision, scale)
1) 一个数值的精度是整数中有效位数的总数,即小数点两边的位数
2) 数字的小数位数是小数部分小数点右边的小数位数
由于插入语句的结果是 105110930.73593074,总位数是 17,小数点后是 8,所以你应该使用 decimal(17,8)
Select (round(3884.90000000 / 0.00003696, 8));