Oracle
 sql >> Database >  >> RDS >> Oracle

Colonna di query con tipo di dati char in Oracle

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