Le problème est de savoir si vous utilisez char ou varchar2 sémantique de comparaison dans vos requêtes. Si vous avez un littéral de chaîne codé en dur ou un char(10) variable, Oracle utilise le char sémantique de comparaison qui doit ignorer l'espace blanc de fin. Si vous avez un varchar2(10) variable, Oracle utilise le varchar2 sémantique de comparaison qui inclut l'espace blanc de fin. Ainsi
select aa
into v_temp
from abc
where aa in (v_aa);
renverra une ligne si v_aa est défini comme un char(10) (ou s'il est remplacé par un littéral de chaîne) mais pas s'il est défini comme un varchar(10) .
C'est l'une des (nombreuses) raisons pour lesquelles la plupart des gens évitent char types de données entièrement. Personnellement, les char occasionnels ne me dérangent pas pour des données vraiment à largeur fixe (c'est-à-dire char(1) pour les drapeaux et char(2) pour les codes d'état) même s'il n'y a aucun avantage à utiliser char sur varchar2 dans ces scénarios. Pour tout ce qui n'est pas à largeur fixe, cependant, en utilisant un char ça n'a aucun sens. Vous ne faites qu'obliger Oracle à consommer plus d'espace qu'il n'en a besoin et à créer plus de travail pour vous-même en traitant deux ensembles de sémantiques de comparaison de chaînes (entre autres problèmes).