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).