Il problema è se usi char
o varchar2
semantica di confronto nelle tue query. Se hai una stringa letterale codificata o un char(10)
variabile, Oracle utilizza il char
semantica di confronto che deve ignorare lo spazio bianco finale. Se hai un varchar2(10)
variabile, Oracle utilizza varchar2
semantica di confronto che include lo spazio bianco finale. Così
select aa
into v_temp
from abc
where aa in (v_aa);
restituirà una riga se v_aa
è definito come char(10)
(o se viene sostituito con una stringa letterale) ma non se è definito come varchar(10)
.
Questo è uno dei (molti) motivi per cui la maggior parte delle persone evita char
tipi di dati interamente. Personalmente, non mi dispiace l'occasionale char
per dati a larghezza veramente fissa (ad esempio char(1)
per i flag e char(2)
per i codici di stato) anche se non vi è alcun vantaggio nell'utilizzo di char
su varchar2
in quegli scenari. Per tutto ciò che non è a larghezza fissa, tuttavia, utilizzare un char
non ha senso. Stai solo costringendo Oracle a consumare più spazio del necessario e creando più lavoro per te stesso occupandoti di due set di semantica di confronto di stringhe (tra gli altri problemi).