Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/10/2007, 14:56
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: Problema con parámetros y espacios

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