Hola,
Aqui hay un pequeño ejemplo de como funciona esto dentro de la base de datos.
Código:
SQL> create table t10 (id number, name char(10));
Table created.
SQL> insert into t10 values (1,'Hola');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t10 where name = 'Hola';
ID NAME
---------- ----------
1 Hola
SQL> update t10 set id = 2 where name = 'Hola';
1 row updated.
SQL> commit;
Commit complete.
SQL> select * from t10;
ID NAME
---------- ----------
2 Hola
SQL> set serveroutput on;
SQL> r
1 declare
2 c number;
3 v char(10);
4 begin
5 v:='Hola';
6 select count(*) into c from t10 where name = v;
7 dbms_output.put_line(c);
8* end;
9 /
1
PL/SQL procedure successfully completed.
Hasta aqui, todo funciona bien, pero hay que prestarle un poco de atencion a llos tipos de datos CHAR, una funcion interesante de Oracle nos dice el contenido del campo
name
Código:
SQL> select dump(name) from t10;
DUMP(NAME)
--------------------------------------------------------------------------------
Typ=96 Len=10: 72,111,108,97,32,32,32,32,32,32
Fijate las 6 veces que aparece el 32, esos son los espacios en blanco que utiliza Oracle para completar la longitud hasta llegar a CHAR(10). Es decir que en este tipo de dato siempre se van a completar con espacios en blanco hasta llegar a la longitud del campo.
Desde el SQL*Plus esto no es un problema, pero para tu aplicacion parece ser que lo es, es decir que 'Hola' no es igual a 'Hola '. Intenta ver que sucede si el tipo de dato de la columna es VARCHAR2(10) o bien aplicar la funcion TRIM.
Saludos