Selon la documentation, Number(*,0)
signifie que vous travaillez avec les très grands entiers, soit jusqu'à 38 chiffres et sans décimales:
column_name NUMBER (precision, scale)
... précision (nombre total de chiffres) et échelle (nombre de chiffres à la droite de la virgule décimale):
column_name NUMBER (*, scale)
Dans ce cas, la précision est 38 et l'échelle spécifiée est conservée.
Nombre de chiffres trop important pour stocker dans CF_SQL_INTEGER
. Pour soutenir toute la gamme, nécessite un type avec une capacité beaucoup plus grande. En regardant la norme JDBC Mappings cela signifie soit java.sql.Types.NUMERIC
ou java.sql.Types.DECIMAL
. Les deux utilisent le BigDecimal de Java pour le stockage, qui a une capacité plus que suffisante pour Number(38,0)
.
La matrice cfqueryparam et la documentation Oracle JDBC driver disent toutes les deux la même chose à propos du type DECIMAL. Depuis java.sql.Types.NUMERIC
est vraiment juste un synonyme de java.sql.Types.DECIMAL
vous pouvez utiliser l'un ou l'autre.
Remarque: Lors de l'utilisation de cfqueryparam, si vous omettez l'attribut "scale", il est par défaut égal à scale = "0", c'est-à-dire sans décimales.
<cfqueryparam type="CF_SQL_DECIMAL" scale="0" value="....">
Je sais que les deux '' CF_SQL_INTEGER' et fonctionne CF_SQL_FLOAT', mais honnêtement je ne pensais pas du recommandé de deux à utiliser pour un numéro de orcle (*, 0). – Anurag
N'utiliseriez-vous pas simplement CF_SQL_NUMERIC comme type de données numérique? – haxtbh
@haxtbh, Oui, je pourrais utiliser CF_SQL_NUMERIC. Récemment, j'ai été déplacé vers une application héritée. Ils ont explicitement utilisé CF_SQL_INTEGER pour Number (*, 0) et CF_SQL_FLOAT pour Number (*, entier positif). Maintenant, je me demande pourquoi c'est le cas. –