Oracle
 sql >> Base de données >  >> RDS >> Oracle

Pourquoi Oracle 9i traite-t-il une chaîne vide comme NULL ?

Je crois que la réponse est qu'Oracle est très, très ancien.

Autrefois, avant qu'il n'y ait une norme SQL, Oracle a pris la décision de conception que les chaînes vides dans VARCHAR /VARCHAR2 les colonnes étaient NULL et qu'il n'y avait qu'un seul sens de NULL (il y a des théoriciens relationnels qui différencieraient les données qui n'ont jamais été demandées, les données où la réponse existe mais n'est pas connue de l'utilisateur, les données où il n'y a pas de réponse, etc. qui constituent un certain sens de NULL ).

Au moment où la norme SQL est arrivée et a convenu que NULL et la chaîne vide étaient des entités distinctes, il y avait déjà des utilisateurs Oracle qui avaient du code qui supposait que les deux étaient équivalents. Ainsi, Oracle se retrouvait essentiellement avec les options de casser le code existant, de violer la norme SQL ou d'introduire une sorte de paramètre d'initialisation qui modifierait la fonctionnalité d'un nombre potentiellement important de requêtes. La violation de la norme SQL (IMHO) était la moins perturbatrice de ces trois options.

Oracle a laissé ouverte la possibilité que le VARCHAR le type de données changerait dans une future version pour adhérer à la norme SQL (c'est pourquoi tout le monde utilise VARCHAR2 dans Oracle puisque le comportement de ce type de données est garanti pour rester le même à l'avenir).