我有点困惑我应该为 Oracle 使用哪种数据类型,Number(*,0)
具有零刻度和任何精度?
我应该使用哪一个CF_SQL_INTEGER
?CF_SQL_FLOAT
为什么?
我有点困惑我应该为 Oracle 使用哪种数据类型,Number(*,0)
具有零刻度和任何精度?
我应该使用哪一个CF_SQL_INTEGER
?CF_SQL_FLOAT
为什么?
根据文档,Number(*,0)
意味着您正在使用非常大的整数,即最多 38 位且没有小数位:
column_name NUMBER (precision, scale)
...精度(总位数)和比例(小数点右侧的位数):
column_name NUMBER (*, scale)
在这种情况下,精度为 38,并保持指定的比例。
数字太多,无法存储CF_SQL_INTEGER
。要支持全系列,需要容量更大的类型。查看标准JDBC 映射,这意味着要么java.sql.Types.NUMERIC
要么java.sql.Types.DECIMAL
. 两者都使用 java 的BigDecimal进行存储,它有足够的容量来存储Number(38,0)
.
cfqueryparam矩阵和Oracle JDBC 驱动程序文档都对 DECIMAL 类型说了同样的话。因为真的只是一个同义词,你可以使用任何一个。java.sql.Types.NUMERIC
java.sql.Types.DECIMAL
注意:使用cfqueryparam 时,如果省略“scale”属性,则默认为scale="0",即没有小数位。
<cfqueryparam type="CF_SQL_DECIMAL" scale="0" value="....">