PiensoPienso IV


Sigue la serie PiensoPienso.

Tengo una tabla con los valores

Id* Descripcion
10 Diez
20 Veinte
30 Treinta

Hago un procedimiento GeneXus que hace

for each
where Id=20
call(PAgrego,Id)
Descripcion='Cambio el 20'
endfor
commit


donde pAgrego es

parm(Id);
New
Id=90
Descripcion='Noventa'
Endnew
commit

Las preguntas son:
1) Cual es el contenido de la tabla al terminar el procedimiento?


a)
10 Diez
20 Veinte
30 Treinta
90 Noventa

b)
10 Diez
20 Cambio el 20
30 Treinta
90 Noventa

c)
10 Diez
20 Veinte
30 Treinta
90 Cambio el 20

3) Si modifico el procedimiento alterando el orden del call con la asignación


for each
where Id=20
Descripcion='Cambio el 20'
call(PAgrego,Id)
endfor
commit



Cual es el contenido de la tabla al terminar el procedimiento?

a)
10 Diez
20 Veinte
30 Treinta
90 Noventa

b)
10 Diez
20 Cambio el 20
30 Treinta
90 Noventa

c)
10 Diez
20 Veinte
30 Treinta
90 Cambio el 20

Comentarios

  1. En la primera, el a) no puede ser porque alguna tiene que quedar con "Cambio el 20"... La respuesta lógica sería la b), aunque no tendría gracia la pregunta.

    En la segunda, es lo mismo que la primera, porque de todas formas el update se hace en el endfor.

    ResponderBorrar
  2. Marcos:
    Al final no te la jugaste categoricamente por ninguna!!.

    De cualquier forma, el jurado te da la prueba como superada. Te ganaste un artistico jarron.

    Si, para ambas la respuesta es c).
    O sea el procedimiento modifica el valor de ID y a pesar que lo leyo con Id=20, al hacer el New, pasa a tener un Id=90 y hace el UPDATE a un registro que no leyo.

    No son errores faciles de detectar en el codigo, cuando el codigo es mas complejo, cosa que sucede en la vida real.

    Las posibles soluciones son:

    i) poner In y Out en la regla parm

    ii) utilizar variables en los parametros que se puedan modificar y que dichas variables no intevengan en las condiciones del for each.

    No conozco si existe alguna forma de detectar estas situaciones. Si lo hubiera, creo que se podrian explicar muchos misterios y corregirlos.

    Enrique

    ResponderBorrar
  3. Esta vez no me dejaste contestar!

    Si estuvieramos en la version 1.0 de GX y reportaran esto, creo que seria catalogado como bug. Hoy no lo podemos arreglar porque no se cuantas cosas se 'rompen'.

    ResponderBorrar
  4. Hola Enrique, te consteste al correo sobre el tema de un curso en Colombia.
    un saludo
    Jose Nadim Mendez

    ResponderBorrar

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.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

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

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