A comparação entre variáveis
VARCHAR2 e CHAR podem retornar falso caso estejam guardando as mesmas
sequências de caracteres. Isso acontece porque se atribuirmos um valor a
uma variável do tipo CHAR menor que o tamanho definido para ela, será
preenchido com espaços. Isso não acontece com VARCHAR2, que conterá
apenas o tamanho que for atribuído à variável.
declare
x1 varchar2(10);
x2 char(10);
begin
x1:= 'xomano';
x2:= 'xomano';
if x1 = x2 then
dbms_output.put_line('exatamente
iguais');
else
dbms_output.put_line('diferente!');
end if;
end;
Saída: diferente!
Para
que o resultado seja igual, devemos usar a função Trim na variável de
tipo CHAR para que ela possa 'aparar' os espaços preenchidos pelo
Oracle.
declare
x1 varchar2(10);
x2 char(10);
begin
x1:= 'xomano';
x2:= 'xomano';
if x1 = trim(x2) then
dbms_output.put_line('exatamente
iguais');
else
dbms_output.put_line('diferente!');
end if;
end;
Saída: exatamente iguais
Nota
Não
é recomendado utilizar o tipo CHAR para guardar várias sequências de
caracteres, pois pode acabar havendo alguns problemas além de comparação
entre strings de tipo diferente como o VARCHAR2. Precisar usar a função
Trim pode comprometer performance além do fato do Oracle alocar todo o
espaço indicado para a variável de tipo CHAR.