dft_sqlmathwarn-Poursuivre en cas d'exceptions arithmétiques paramètre de configuration
Ce paramètre définit la valeur qui détermine le traitement des erreurs arithmétiques, telles que la division par zéro, et les erreurs de conversion d'extraction lors de l'exécution de l'instruction SQL.
- Type de configuration
- Base de données
- Type de paramètre
- Configurable
- Valeur par défaut [plage]
- Non [Non, Oui]
Pour les instructions SQL statiques, la valeur de ce paramètre est associée au module au moment de la liaison. Pour les instructions DML (dynamic SQL data manipulation language), la valeur de ce paramètre est utilisée lors de la préparation de l'instruction.
Recommandation: utilisez le paramètre par défaut No, sauf si vous exigez spécifiquement le traitement de requêtes incluant des exceptions arithmétiques. Spécifiez ensuite la valeur de Yes. Le traitement des requêtes qui incluent des exceptions arithmétiques peut se produire si vous traitez des instructions SQL qui, sur d'autres gestionnaires de base de données, fournissent des résultats, quelles que soient les exceptions arithmétiques qui se produisent.
Effets de la modification de la valeur de dft_sqlmathwarn
Si vous modifiez la valeur dft_sqlmathwarn pour une base de données, le comportement des contraintes de vérification, des déclencheurs, des vues et des index avec des clés basées sur des expressions qui incluent des expressions arithmétiques peut changer. Cela peut, à son tour, avoir un impact sur l'intégrité des données de la base de données. Ne modifiez la valeur du paramètre de configuration dft_sqlmathwarn pour une base de données qu'après avoir soigneusement évalué la manière dont le nouveau comportement de traitement des exceptions arithmétiques peut avoir un impact sur les contraintes de vérification, les déclencheurs, les vues et les index avec des clés basées sur des expressions. Supprimez et recréez tous les index basés sur des expressions susceptibles d'être impactés après avoir modifié la valeur du paramètre de configuration dft_sqlmathwarn . Si vous n'êtes pas certain qu'un index basé sur une expression spécifique est impacté, il est préférable de supprimer et de recréer l'index afin d'éviter des valeurs incorrectes dans l'index.
A/B > 0Lorsque dft_sqlmathwarn a pour valeur No et qu'une instruction INSERT avec B=0 est tentée, la division par zéro est traitée comme une erreur arithmétique. L'opération d'insertion échoue car le gestionnaire de base de données Db2® ne peut pas vérifier la contrainte. Si dft_sqlmathwarn est remplacé par Oui, la division par zéro est traitée comme un avertissement arithmétique avec un résultat NULL. Le résultat NULL entraîne l'évaluation du prédicat sur UNKNOWN et l'opération d'insertion aboutit. Si dft_sqlmathwarn est redéfini sur Non, une tentative d'insertion de la même ligne échouera, car l'erreur de division par zéro empêche le gestionnaire de base de données Db2 d'évaluer la contrainte. La ligne qui a été insérée avec B=0 lorsque dft_sqlmathwarn a été défini sur Oui reste dans la table et peut être sélectionnée. Les mises à jour de la ligne qui provoquent l'échec de l'évaluation de la contrainte et les mises à jour de la ligne qui ne nécessitent pas de réévaluation de la contrainte aboutissent.
( A/B > 0 ) AND ( CASE
WHEN A IS NULL THEN 1
WHEN B IS NULL THEN 1
WHEN A/B IS NULL THEN 0
ELSE 1
END
= 1 )Et, si A ou B n'admet pas la valeur NULL, la clause IS NULL WHEN-correspondante peut être supprimée.
WHERE A IS NOT NULL AND B IS NOT NULL AND A/B IS NULLSi vous isolez des lignes incohérentes, vous devez prendre les mesures appropriées pour corriger l'incohérence avant de modifier dft_sqlmathwarn. Vous pouvez également revérifier manuellement les contraintes avec des expressions arithmétiques après la modification. Pour vérifier manuellement les contraintes, placez les tables affectées dans un état d'attente de vérification avec la clause OFF de l'instruction SET CONTRAINTES et demandez que les tables soient vérifiées avec la clause IMMEDIATE CHECKED de l'instruction SET CONTRAINTES. Les données incohérentes sont indiquées par une erreur arithmétique, qui empêche l'évaluation de la contrainte.