Het probleem is of je char
. gebruikt of varchar2
vergelijkingssemantiek in uw zoekopdrachten. Als je een hardgecodeerde letterlijke tekenreeks of een char(10)
. hebt variabele, Oracle gebruikt de char
vergelijkingssemantiek die de volgende witruimte moet negeren. Als je een varchar2(10)
. hebt variabele, Oracle gebruikt de varchar2
vergelijkingssemantiek die de volgende witruimte omvat. Dus
select aa
into v_temp
from abc
where aa in (v_aa);
zal een rij retourneren als v_aa
is gedefinieerd als een char(10)
(of als het wordt vervangen door een letterlijke tekenreeks) maar niet als het is gedefinieerd als een varchar(10)
.
Dit is een van de (vele) redenen waarom de meeste mensen char
vermijden gegevenstypen volledig. Persoonlijk vind ik het af en toe een char
niet erg voor data met echt vaste breedte (d.w.z. char(1)
voor vlaggen en char(2)
voor staatscodes), hoewel het geen voordeel heeft om char
. te gebruiken via varchar2
in die scenario's. Voor alles dat geen vaste breedte heeft, gebruikt u echter een char
slaat nergens op. Je dwingt Oracle alleen maar meer ruimte in te nemen dan nodig is en je creëert meer werk voor jezelf met twee sets stringvergelijkingssemantiek (onder andere).