Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Pedido] Final - Gestión de datos 11/02/2014
Autor Mensaje
gonnza Sin conexión
User Verde

*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 17.356
Agradecimientos dados: 900
Agradecimientos: 889 en 356 posts
Registro en: Mar 2010
BlogSpot Google+ YouTube
Mensaje: #16
RE: [Pedido] Final - Gestión de datos 11/02/2014
vos en un trigger podes meter un script completo y ejecutar varias querys

salvo que le des manualmente rollback, no se va a interrumpir el flujo de ejecucion, se va a ejecutar todo

una consulta que no devuelve filas no es un rollback ni un error, asique no va a pasar nada, el trigger se va a ejecutar normalmente

[Imagen: v34BEFt.gif]
25-02-2015 14:53
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] gonnza recibio 2 Gracias por este post
Nacho14 (25-02-2015), CarooLina (07-02-2018)
Nacho14 Sin conexión
Profesor del Modulo A
-
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 295
Agradecimientos dados: 36
Agradecimientos: 50 en 36 posts
Registro en: Aug 2009
Mensaje: #17
RE: [Pedido] Final - Gestión de datos 11/02/2014
(19-02-2015 11:55)LeandroG escribió:  
(13-02-2014 10:51)ortiba escribió:  ¿La respuesta al ejercicio 3 no sería la D "No hay suficiente información"?
Porque dependiendo del isolation level (que no lo menciona en el ejercicio) el proceso 1 puede o no ver lo que insertó el proceso 2.

No puede ser la D. Por mas que especifique el isolation level, no cambiaria nada. Porque el proceso 2 tira error (si se ejecuta el proceso 1 primero o el 2 primero).
Es la A, pq es cierto que a y b siempre son iguales, siempre valen 0.

Pero son procesos que por mas que se ejecuten en paralelo, son independientes.
Porque el proceso 2 falla, pq la tabla no tiene nada, y no puede insertar null en la tabla.
El proceso uno, solo define unas variables, pero no inserta nada en la tabla que pueda llegar a modificar la consulta del proceso 2.

corrijanme si me equivoco

Saludos

Estoy de acuerdo con vos.

En este caso no son validas dos respuestas, solo la A es la correcta.
(Este mensaje fue modificado por última vez en: 26-02-2015 12:44 por Nacho14.)
26-02-2015 12:43
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Nacho14 recibio 1 Gracias por este post
DarkCrazy (27-07-2015)
DarkCrazy Sin conexión
Profesor del Modulo A
Howdy ho!
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 394
Agradecimientos dados: 461
Agradecimientos: 255 en 78 posts
Registro en: Mar 2011
Mensaje: #18
RE: [Pedido] Final - Gestión de datos 11/02/2014
Aquí está mi propuesta de solución para el punto 4, me parece la más clara y fácil de implementar y cumple con la consiga, considerando de la interpretación de la consigna puede variar ya que esta redactada de forma ambigua.

Mi solución: solo permite insertar sobre la tabla, si la secuencia se mantiene. Ejemplo: Si la tabla tiene 1,2,3,4,5 y quiero insetar un 4, no me va a dejar, solo me va a permitir insertar 6. Tampoco me va a dejar insertar un 7. Si la tabla está vacía, sólo me va a permitir insertar el 0 (primer valor del conjunto de números naturales).

Si quiero eliminar, acá se me ocurrieron dos soluciones, una es que solo me dejara eliminar si queria eliminar EL ÚLTIMO VALOR de la secuencia, o sea, si tengo 1,2,3,4,5 y quería el eliminar el 5, ok, cualquier otro caso NO.
La otra solución es que al eliminar cualquier valor de la tabla, se ignore esto y se elimine el último. De esta forma la secuencia sigue estando ordenada y es la solución que implementé.

Finalmente, no le dejo hacer UPDATE sobre la tabla ya que carece de sentido dicha operación sobre dicha tabla si el trigger para insert funciona correctamente.

Importante, si lo van a probar, cambien "prueba2" por "prueba"


DROP TRIGGER t_naturales_insert
GO
CREATE TRIGGER t_naturales_insert on prueba2 instead of insert
AS
BEGIN TRANSACTION
declare @aux1 int, @aux2 int
set @aux2='-1'
select @aux1 = i.col1 from inserted i
select top 1 @aux2 = p.col1 from prueba2 p ORDER BY p.col1 DESC

if (@aux1=@aux2+1 or (@aux2='-1' and @aux1=0))
begin
insert into prueba2 (col1) values (@aux1)
commit
end
else
rollback

go

drop trigger t_naturales_delete
go
CREATE TRIGGER t_naturales_delete on prueba2 instead of delete
AS
begin transaction
declare @borrado int--, @ max int

select @borrado=col1 from deleted
--select @max=max(col1) from prueba2

if @borrado in (select col1 from prueba2)
begin
delete prueba2 where col1=@max
end
else begin
delete prueba2 where col1=@borrado
end
commit

drop trigger t_naturales_update
go
CREATE TRIGGER t_naturales_update on prueba2 instead of update
AS
BEGIN
print('No se puede realizar update sobre esta tabla')
END



Se podría agregar un trigger más que cumpla la función de CONSTRAINT UNIQUE, no permitiendo que se agreguen valores duplicados, ya que no hay valores duplicados en una secuencia de números naturales.

No entiendo lo de "Huecos"...Si alguien me lo explica estaría muy agradecido!
Espero que mi solución le sea de utilidad a alguno!
Saludos
(Este mensaje fue modificado por última vez en: 27-07-2015 18:37 por DarkCrazy.)
27-07-2015 18:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] DarkCrazy recibio 1 Gracias por este post
LeandroG (05-07-2016)
mariano0 Sin conexión
Empleado de Fotocopiadora
Sin Estado :(
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 45
Agradecimientos dados: 9
Agradecimientos: 39 en 11 posts
Registro en: Dec 2012
Mensaje: #19
RE: [Pedido] Final - Gestión de datos 11/02/2014
(27-07-2015 18:28)DarkCrazy escribió:  


if @borrado in (select col1 from prueba2)
begin
delete prueba2 where col1=@max
end
else begin
delete prueba2 where col1=@borrado
end



No entendi bien eso. Si el que querés borrar está en la tabla, borrás el máximo de la tabla. Si no está, borras ese registro de la tabla(nunca lo va a encontrar).

Los huecos supongo que se refiere a que no puede quedar 1-2-3-5-6-7. Siempre tienen que ser consecutivos.


Sobre el 3.a. yo le preguntaría durante el examen si "siempre son iguales" se refiere a que en todo momento sean iguales o a que siempre terminan valiendo lo mismo. Lo más obvio sería lo 2º, pero por las dudas preguntaría.
Si es que en todo momento sean iguales sería falso, porque en un momento @a es 0 y @b es NULL.
28-07-2015 01:11
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
takuma1985 Sin conexión
Militante
.
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 56
Agradecimientos dados: 107
Agradecimientos: 81 en 18 posts
Registro en: Oct 2011
Mensaje: #20
RE: [Pedido] Final - Gestión de datos 11/02/2014
(26-02-2015 12:43)Nacho14 escribió:  
(19-02-2015 11:55)LeandroG escribió:  
(13-02-2014 10:51)ortiba escribió:  ¿La respuesta al ejercicio 3 no sería la D "No hay suficiente información"?
Porque dependiendo del isolation level (que no lo menciona en el ejercicio) el proceso 1 puede o no ver lo que insertó el proceso 2.

No puede ser la D. Por mas que especifique el isolation level, no cambiaria nada. Porque el proceso 2 tira error (si se ejecuta el proceso 1 primero o el 2 primero).
Es la A, pq es cierto que a y b siempre son iguales, siempre valen 0.

Pero son procesos que por mas que se ejecuten en paralelo, son independientes.
Porque el proceso 2 falla, pq la tabla no tiene nada, y no puede insertar null en la tabla.
El proceso uno, solo define unas variables, pero no inserta nada en la tabla que pueda llegar a modificar la consulta del proceso 2.

corrijanme si me equivoco

Saludos

Estoy de acuerdo con vos.

En este caso no son validas dos respuestas, solo la A es la correcta.

Hola,
Revivo esto porque en el final de hoy tomaron exactamente el mismo ejercicio. Yo coincido con que la respuesta correcta es la A y es lo que puse. Resulta que me lo dieron como incorrecto. Cuando me fui a quejar, expliqué mi justificación, Laquaniti entendió lo que decía y de hecho estaba un poco de acuerdo, pero cuando fue a hablar con Reinosa, no hubo forma de hacerle entender mi punto de vista, por lo que me puso 0 puntos y no llegué a aprobar (hice 5 cuando el máximo es 6).
El tema de que tira error, me lo retrucaron diciendo que "depende de cómo esté configurado el motor", entonces en base a eso me dijeron "la respuesta correcta es la d, porque no hay información suficiente". En fin...
22-02-2017 00:25
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] takuma1985 recibio 1 Gracias por este post
CarooLina (06-02-2018)
Bian Sin conexión
Campeon del cubo Rubik
ingeniera en sistemas
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 196
Agradecimientos dados: 170
Agradecimientos: 298 en 40 posts
Registro en: Dec 2012
Mensaje: #21
RE: [Pedido] Final - Gestión de datos 11/02/2014
(22-02-2017 00:25)takuma1985 escribió:  
(26-02-2015 12:43)Nacho14 escribió:  
(19-02-2015 11:55)LeandroG escribió:  
(13-02-2014 10:51)ortiba escribió:  ¿La respuesta al ejercicio 3 no sería la D "No hay suficiente información"?
Porque dependiendo del isolation level (que no lo menciona en el ejercicio) el proceso 1 puede o no ver lo que insertó el proceso 2.

No puede ser la D. Por mas que especifique el isolation level, no cambiaria nada. Porque el proceso 2 tira error (si se ejecuta el proceso 1 primero o el 2 primero).
Es la A, pq es cierto que a y b siempre son iguales, siempre valen 0.

Pero son procesos que por mas que se ejecuten en paralelo, son independientes.
Porque el proceso 2 falla, pq la tabla no tiene nada, y no puede insertar null en la tabla.
El proceso uno, solo define unas variables, pero no inserta nada en la tabla que pueda llegar a modificar la consulta del proceso 2.

corrijanme si me equivoco

Saludos

Estoy de acuerdo con vos.

En este caso no son validas dos respuestas, solo la A es la correcta.

Hola,
Revivo esto porque en el final de hoy tomaron exactamente el mismo ejercicio. Yo coincido con que la respuesta correcta es la A y es lo que puse. Resulta que me lo dieron como incorrecto. Cuando me fui a quejar, expliqué mi justificación, Laquaniti entendió lo que decía y de hecho estaba un poco de acuerdo, pero cuando fue a hablar con Reinosa, no hubo forma de hacerle entender mi punto de vista, por lo que me puso 0 puntos y no llegué a aprobar (hice 5 cuando el máximo es 6).
El tema de que tira error, me lo retrucaron diciendo que "depende de cómo esté configurado el motor", entonces en base a eso me dijeron "la respuesta correcta es la d, porque no hay información suficiente". En fin...

Es la D porque antes que nada, no sabés en que tiempo se ejecuta cada statement. En el caso de que el isolation level sea menos permisivo, hay algunos locks que actúan sobre la tabla que están modificando/leyendo en ese momento, y otros que actúan sobre la transacción completa (creo que eso es cuando especificas snapshot on/off), y además también depende del isolation level propiamente dicho. Se ejecutan en paralelo, por mas de que sean independientes están intentando leer/modificar sobre la misma db y mismas tablas, por lo cual si no tenes el tiempo, y un par de datos mas no podés deducir nada. Obvio que podes decir que el default en sql server es snapshot off, el isolation level bla, pero no podes asumir que tienen el motor configurado de esa manera en ese momento, por mas de que asumas que es sql server.
08-07-2017 21:25
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)