J'ai essayé de mettre à jour une table comme suit:
update userloginstats set logouttime = sysdate where logouttime = null;
Il n'a pas mis à jour les colonnes avec des valeurs nulles. Qu'est ce qui ne s'est pas bien passé?
Changez-le en
...where logouttime is null;
^^^^^^^
NULL
est une valeur spéciale et nous ne pouvons pas utiliser l'habituel =
opérateur avec.
Depuis documentation Oracle pour NULL :
Pour tester les valeurs nulles, utilisez uniquement les conditions de comparaison IS NULL et IS NOT NULL. Si vous utilisez une autre condition avec null et que le résultat dépend de la valeur de null, le résultat est UNKNOWN car null représente un manque de données, un null ne peut pas être égal ou inégal à toute valeur ou à un autre null
Vous ne pouvez pas comparer les valeurs NULL avec =.
Utilisez ceci:
update userloginstats set logouttime= sysdate where logouttime is null;
logouttime is null
, ne pas = null
. null
n'est jamais égal à rien, pas même à lui-même. Ainsi, l'opérateur is
.
Vous devez utiliser is null
ne pas = null
update userloginstats set logouttime= sysdate where logouttime is null;
Pour les valeurs nulles, vous devez utiliser "IS NULL" ou "IS NOT NULL" plutôt que l'opérateur =. C'est parce que null n'est techniquement ni vrai ni faux, c'est plutôt l'absence de valeur dans les deux cas.
La plupart des langages de programmation associent généralement null à false pour plus de commodité (et permettent ainsi l'utilisation de l'opérateur =), mais SQL adopte une approche plus puriste, à tort ou à raison.