PiensoPienso I
Mi padre siempre nos planetaba problemas a la hora de la cena. A los mas chicos, les tocaba VeoVeo, y a los mas grandes PiensoPienso. Como somos 6 hermanos y yo soy el tercero algunas veces podia lucirme con los primeros y me costaban un poco más los segundos.
Tiro un problema "Facil y de ingenio", por si alguien quiere resolverlo y contestarlo en los comentarios. He visto que alguno de estos conceptos les cuesta a los que recien empiezan con Genexus y producen muchos bloqueos en la base de datos.
Tengo una tabla con los valores
Id* Descripcion
10 Diez
20 Entre Diez y Treinta
30 Treinta
Hago un procedimiento GeneXus que hace
For each
If Id=20
Descripcion='Veinte'
Endif
Endfor
La pregunta es:
Cuantas sentencias UPDATE se realizan en la base de datos?
Para los mas chicos, va con multiple opción
a) 1
b) 3
c) 6
3, pero es una 'leaky abstraction', deberia/podria actualizar solo 1 vez, y eventualmente hasta evitar el lock si hace lo equivalente al piensopiensoII..
ResponderBorrarAnónimo:
ResponderBorrarTu respuesta es correcta.
Por no haber dejado tu nombre y las ultimas 3 digitos de la cédula, la producción de este blog, no podrá darte el premio del concurso (dos noches de estadia en el camping "Barracuda" en La Floresta, de martes a jueves, en el mes de Agosto).
Lo importante de este problema, es ver que como esta implementado actualmente (Genexus 9.0 U3) se bloquea todo el contenido de la tabla y se realizan tantos updates como registros tenga la misma.
En PiensoPienso II, solamente se realiza un update y la tabla no se bloquea.
Preparate para el PiensoPienso III!!.
La forma mas correcta de realizarlo seria de la forma
ResponderBorrarfor each
where id=20
Descripcion='Veinte'
endfor
De esta forma haria un unico lock y update.