Das Problem hängt davon ab, ob Sie char
verwenden oder varchar2
Vergleichssemantik in Ihren Abfragen. Wenn Sie ein hartcodiertes Zeichenfolgenliteral oder ein char(10)
haben Variable verwendet Oracle den char
Vergleichssemantik, die den nachgestellten Leerraum ignorieren soll. Wenn Sie einen varchar2(10)
haben Variable verwendet Oracle die varchar2
Vergleichssemantik, die den abschließenden Leerraum enthält. Also
select aa
into v_temp
from abc
where aa in (v_aa);
gibt eine Zeile zurück, wenn v_aa
ist als char(10)
definiert (oder wenn es durch ein Zeichenfolgenliteral ersetzt wird), aber nicht, wenn es als varchar(10)
definiert ist .
Dies ist einer der (vielen) Gründe, warum die meisten Menschen char
vermeiden Datentypen vollständig. Persönlich stört mich das gelegentliche char
nicht für Daten mit wirklich fester Breite (d. h. char(1)
für Flags und char(2)
für Bundesstaatscodes), obwohl die Verwendung von char
keinen Vorteil bringt über varchar2
in diesen Szenarien. Verwenden Sie für alles, was keine feste Breite hat, jedoch ein char
macht keinen Sinn. Sie zwingen Oracle nur, mehr Speicherplatz zu verbrauchen, als es benötigt, und schaffen sich selbst mehr Arbeit, wenn Sie sich (neben anderen Problemen) mit zwei Sätzen von Zeichenfolgenvergleichssemantiken befassen.