PIENSOPIENSO: Cual es la salida de este programa?

Temgo una tabla de Paises que esta vacia, en una KB GeneXus, generando con C#

*PaisID           C(2)
PaisNombre    C(100)

y un procedimiento Command line

//Doy de alta un registro en la tabla. 
&PaisNombre='Uruguay'
New
   PaisID='UY'
   PaisNombre=&PaisNombre
EndNew

//Consulto 1 Con Trim()
for each
    where PaisNombre=&PaisNombre.Trim()
    Msg(PaisID,status)
when none
    Msg('No existe 1',status)
endfor

//Consulto 2 Sin Trim()
for each
    where PaisNombre=&PaisNombre
    Msg(PaisID,status)
when none
    Msg('No existe 2',status)
endfor

//Consulto con Trim() en variable
&PaisNombre=&PaisNombre.Trim()
for each
    where PaisNombre=&PaisNombre
    Msg(PaisID,status)
when none
    Msg('No existe 3',status)
endfor

!) Cual es la salida de este programa en SQL Server. 

2) Cual es la salida de este programa en Oracle

Justifique su respuesta. 


UPDATE:
David ya dio las respuesta correcta en los comentarios, pero lo dejo aqui

En SQL Server, la salida es 

UY
UY
UY

y en ORACLE, la salida es
No existe 1
UY
UY

O sea, el mismo codigo GeneXus, hace cosas diferentes con diferentes bases de datos. La culpa de esto es que las funciones de trim en la base de datos, devuelven tipos de datos diferentes, en SQL Server y Oracle, por lo que hay que tener mucho cuidado. 
Cuando el trim lo hace GeneXus, funcionan en forma equivalente, pero si la condicion se evalua en el DBMS hay que tener cuidado. 




&PaisNombre.Trim()
for each
   where PaisNombre=&PaisNombre

NO ES EQUIVALENTE A


for each
    where PaisNombre=&PaisNombre.Trim()


aunque parezca lo mismo.

En este caso, PaisNombre es C(100) y &PaisNombre tambien, pero el Trim() devuelve un varchar, por lo que la comparacion no devuelve nada, si PaisNombre tiene blancos al final.


Comentarios

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.