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
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.
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.
*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 eachwhere PaisNombre=&PaisNombre
Msg(PaisID,status)
when none
Msg('No existe 2',status)
endfor
&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=&PaisNombreNO 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
Publicar un comentario
1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.