3

我有点困惑我应该为 Oracle 使用哪种数据类型,Number(*,0)具有零刻度和任何精度?

我应该使用哪一个CF_SQL_INTEGERCF_SQL_FLOAT为什么?

4

1 回答 1

4

根据文档,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.NUMERICjava.sql.Types.DECIMAL

注意:使用cfqueryparam 时,如果省略“scale”属性,则默认为scale="0",即没有小数位。

    <cfqueryparam type="CF_SQL_DECIMAL" scale="0" value="....">
于 2016-04-01T13:49:24.400 回答