min_dec_div_3 -“十进制除法,小数位数为 3 的”配置参数

Db2® V 11.1.3.3 开始,不推荐使用此参数,并将其替换为 dec_arithmetic 配置参数。 从 V 11.1.3.3开始,如果 dec_arithmetic 配置参数设置为非缺省值,那么将忽略 min_dec_div_3 配置参数。 将 dec_arithmetic 设置为 "DEC.3" 会导致与启用 min_dec_div_3 配置参数相同的行为。
注: 以下信息仅适用于数据服务器和客户机 V 11.1.2.2 及更低版本。

此参数提供了一种快速方法来更改 SQL 中十进制除法的小数位数计算结果。

配置类型
数据库
参数类型
可配置
缺省值 [范围]
No [Yes, No]

min_dec_div_3 数据库配置参数会更改十进制除法算术运算的结果小数位数。 它可设置为“Yes”或“No”。 min_dec_div_3 的缺省值为“No”。 如果值为“No”,那么小数位数计算为 31-p+s-s'。 如果设置为“Yes”,那么小数位数计算为 MAX(3, 31-p+s-s')。 这会导致十进制除法的结果总是至少有 3 个小数位。 精度始终为 31。

更改 min_dec_div_3 的值的效果

更改此数据库配置参数可能会导致更改现有数据库的应用程序。 当更改此数据库配置参数会影响十进制小数部分的结果小数位数时,就可能发生此行为。 以下列表显示可能会影响应用程序的一些可能的情况。 在使用现有数据库的数据库服务器上更改 min_dec_div_3 配置参数之前,请考虑这些情况。
  • 直到隐式或显式重新绑定静态程序包之后,静态程序包才会更改行为。 例如,将值从 NO 更改为 YES 之后,直到执行重新绑定之后,才会在结果中包括附加的小数位。 更改 min_dec_div_3的值后,重新编译其结果受更改影响的所有静态 SQL 程序包以强制重新绑定。 可通过运行 REBIND 命令或 db2rbind 命令来强制执行显式重新绑定。
  • 变更 min_dec_div_3 配置参数之后,具体化查询表 (MQT) 可能包含不同的结果。 要确保先前创建的 MQT 只包含符合新格式的数据,请使用 REFRESH TABLE 语句来刷新这些 MQT。
  • 触发器的结果可能会受更改后的格式影响。 变更 min_dec_div_3 值不会对已写入的数据产生任何影响。
  • 涉及十进制小数部分的检查约束可能会限制先前已接受的某些值。 此类行现在违反了约束,但直到发生下列其中一个事件之后才会检测到:
    • 更新检查约束行所涉及的其中一列
    • 处理带有 IMMEDIATE CHECKED 选项的 SET INTEGRITY 语句
    要强制检查此类约束,请遵循下列步骤:
    1. 运行 ALTER TABLE 语句以删除检查约束
    2. 运行 ALTER TABLE 语句以添加该约束
  • 对于结果受 min_dec_div_3 值的更改影响的生成列,在更改 min_dec_div_3 的值之后,请重新编译所有依赖于该列中的值的静态 SQL 程序包。 要确定哪些静态 SQL 程序包受影响,必须编译所有程序包,然后通过运行 db2rbind 命令重新绑定这些程序包。
  • 对于完全相同的行,具有基于表达式的键(其计算取决于 min_dec_div_3)的索引可能不同。 如果一行是在更改 min_dec_div_3 之前插入的,而另一行是在更改后插入的,那么值将不同。 更改 min_dec_div_3 配置参数的值之后,请删除并重新创建所有可能会受影响的基于表达式的索引。 如果您不确定特定的基于表达式的索引是否受影响,请删除并重新创建该索引以避免索引中的值不正确。
注: min_dec_div_3 还具有以下限制:
  1. 命令 GET DB CFG FOR DBNAME 将不显示 min_dec_div_3 设置。 确定当前设置的最好方法是观察十进制小数结果的副作用。 例如,考虑如下语句:
    VALUES (DEC(1,31,0)/DEC(1,31,5))
    如果此语句返回 SQL 代码 SQL0419N,那么该数据库不具有 min_dec_div_3 支持,或者已将它设置为“No”。 如果语句返回1.000min_dec_div_3 设置为 "Yes"。
  2. 运行以下命令时, min_dec_div_3 不会显示在配置关键字列表中: ? UPDATE DB CFG