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
[APORTE] [Gestión de Datos] Final 26/02/2013
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: [APORTE] [Gestión de Datos] Final 26/02/2013
mmm no estoy seguro de eso, igual la curse hace un tiempo ya asique ni idea.. probalo en una base de datos a ver si te deja crear el trigger =P

[Imagen: v34BEFt.gif]
18-02-2014 15:02
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
fele Sin conexión
Profesor del Modulo A
Engineer :)
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 270
Agradecimientos dados: 68
Agradecimientos: 291 en 67 posts
Registro en: Nov 2008
Mensaje: #17
RE: [APORTE] [Gestión de Datos] Final 26/02/2013
(18-02-2014 14:24)gonnza escribió:  IgnacioM no estas indicando que tipo de trigger es (After, instead of)

Imagino que quisiste hacer "After", porque si fuera Instead of te estaría faltando el insert en caso de que no haya duplicados (acordate que el instead of reemplaza totalmente el insert/update/delete)


cuando se hace un instead of insert sobre una tabla, el insert original se ejecuta y dps se pisa por las sentencias del trigger o no se ejecuta el insert original y directamente ejecuta la sentencias del trigger?

Pregunto para saber como es el insert que falta, supongo es la primer opcion (los inserts originales se guardan en inserted)
O sea el insert faltante es: ... ELSE insert into clientes select * from inserted ?
(Este mensaje fue modificado por última vez en: 24-02-2014 15:29 por fele.)
24-02-2014 15:29
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
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: #18
RE: [APORTE] [Gestión de Datos] Final 26/02/2013
cuando haces un "instead of", el insert que hagas vos a mano (insert into..) no se ejecuta, y se ejecuta lo del trigger. Instead of es literalmente "en vez de", osea, en vez de hacer un insert en esa tabla, hace lo que vos pongas en el trigger

[Imagen: v34BEFt.gif]
24-02-2014 15:44
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] gonnza recibio 1 Gracias por este post
fele (25-02-2014)
IsaacNewton Sin conexión
Profesor del Modulo A
Capo en Física II
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 208
Agradecimientos dados: 0
Agradecimientos: 35 en 25 posts
Registro en: Jul 2009
Mensaje: #19
RE: [APORTE] [Gestión de Datos] Final 26/02/2013
Buenas , alguno sabe si el punto 1 b) es verdadero?

"La acción que ejecuta un trigger y el evento que lo dispara siempre se ejecutan de manera atómica"

Entiendo que el el trigger ejecuta atómicamente pero no estoy seguro del evento que lo dispara...

Muchas gracias!
13-12-2014 12:48
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
NaiaraAcosta Sin conexión
Militante
Sueña...
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 99
Agradecimientos dados: 83
Agradecimientos: 41 en 18 posts
Registro en: May 2012
Mensaje: #20
RE: [APORTE] [Gestión de Datos] Final 26/02/2013
(13-12-2014 12:48)IsaacNewton escribió:  Buenas , alguno sabe si el punto 1 b) es verdadero?

"La acción que ejecuta un trigger y el evento que lo dispara siempre se ejecutan de manera atómica"

Entiendo que el el trigger ejecuta atómicamente pero no estoy seguro del evento que lo dispara...

Muchas gracias!


Casi casi segura que si!, todo se ejecuta de manera atomica.
16-12-2014 11:43
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
aleixen Sin conexión
Empleado de Fotocopiadora
It begins
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 46
Agradecimientos dados: 120
Agradecimientos: 7 en 3 posts
Registro en: May 2011
Mensaje: #21
RE: [APORTE] [Gestión de Datos] Final 26/02/2013
(24-02-2014 15:29)fele escribió:  
(18-02-2014 14:24)gonnza escribió:  IgnacioM no estas indicando que tipo de trigger es (After, instead of)

Imagino que quisiste hacer "After", porque si fuera Instead of te estaría faltando el insert en caso de que no haya duplicados (acordate que el instead of reemplaza totalmente el insert/update/delete)


cuando se hace un instead of insert sobre una tabla, el insert original se ejecuta y dps se pisa por las sentencias del trigger o no se ejecuta el insert original y directamente ejecuta la sentencias del trigger?

Pregunto para saber como es el insert que falta, supongo es la primer opcion (los inserts originales se guardan en inserted)
O sea el insert faltante es: ... ELSE insert into clientes select * from inserted ?

Hola, yo lo hice con un instead of, en este caso , como yo uso un instead of, debo de codificar a mano el insert y el update, asi :


create trigger insertar_modificar_DNI on CLIENTES
instead of insert, update
as
begin



declare @accion char(1),
@nombre char(100),
@apellido char(100),
@dni_insertado decimal(12,2),
@dni_viejo decimal(12,2),
@mail char(100),
@genero char(1),
@localidad char(50)

select @dni_insertado=I.dni from inserted I

set @accion = (case when exists(select * from inserted) and not exists(select * from deleted) then 'I'
when exists(select * from inserted) and exists(select * from deleted) then 'U' end)


if(@accion='U')
begin

if(exists(select * from CLIENTES where dni=@dni_insertado))
begin
Print(' no se puede ingresar o modificar el campo dni, ya que el mismo existe actualmente en la BD')
end

else
begin

select @nombre=nombre,@apellido=apellido,@mail=mail,@genero=genero,@localidad=localidad from inserted

update clientes
set nombre=@nombre,apellido=@apellido,mail=@mail,genero=@genero,localidad=@localidad,dni=@dni_insertado
where dni=@dni_viejo

end
end

if(@accion='I')
begin
if(exists(select * from CLIENTES where dni=@dni_insertado))

begin
Print(' no se puede ingresar o modificar el campo dni, ya que el mismo existe actualmente en la BD')
end

else

begin
insert into CLIENTES select * from inserted
end

end


end


Esta es mas complicada, es preferible usar la que uno de los chicos comento mas atras, un trigger after y rollbakear.

If you're afraid to fall, you fall because you're afraid, everything is choice . . .
(Este mensaje fue modificado por última vez en: 24-02-2015 14:09 por gonnza.)
21-02-2015 12:59
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
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: #22
RE: [APORTE] [Gestión de Datos] Final 26/02/2013

Off-topic:
te edite y agregué el resaltador de sintaxis aleixen fijate de usarlo asi el código es mas legible.. Está aca en la barra de herramientas donde dice "Código" => "SQL"


por otro lado, sin leer si está bien lo que hiciste o no, creo que es mucho mas cómodo que crees 2 triggers (uno para insert y otro para update) mas que hacer un if de una variable con un case chequeando las tablas

una sugerencia nomas.. =)

[Imagen: v34BEFt.gif]
24-02-2015 14:11
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
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: #23
RE: [APORTE] [Gestión de Datos] Final 26/02/2013
suponiendo que el ingreso de datos es de un registro por vez, yo haria algo así


CREATE TRIGGER validarDNI ON clientes AFTER UPDATE, INSERT
AS
BEGIN

IF ((SELECT COUNT(*) FROM INSERTED WHERE INSERTED.DNI NOT IN (SELECT DNI FROM CLIENTES)) = 0)
RAISERROR ('El dni ingresado ya se encuentra en nuestra base de datos')
ROLLBACK

END



------
ahora no se como hacerlo si en el ingreso de datos se pueden updatear o insertar varios datos de distintos dni's a la misma vez, no se si me explico..
(Este mensaje fue modificado por última vez en: 26-02-2015 23:14 por gonnza.)
24-02-2015 21:46
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
aleixen Sin conexión
Empleado de Fotocopiadora
It begins
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 46
Agradecimientos dados: 120
Agradecimientos: 7 en 3 posts
Registro en: May 2011
Mensaje: #24
RE: [APORTE] [Gestión de Datos] Final 26/02/2013
(24-02-2015 14:11)gonnza escribió:  
Off-topic:
te edite y agregué el resaltador de sintaxis aleixen fijate de usarlo asi el código es mas legible.. Está aca en la barra de herramientas donde dice "Código" => "SQL"


por otro lado, sin leer si está bien lo que hiciste o no, creo que es mucho mas cómodo que crees 2 triggers (uno para insert y otro para update) mas que hacer un if de una variable con un case chequeando las tablas

una sugerencia nomas.. =)

Si obviamente, ademas mi solucion tiene un grave error, hace poco trate de updetear una columna distinta a la del DNI, la rta fue DNI repetido, se ve que cuando haces un update no importa si updeteas solo una columna, pisa todos los valores. Esto hace que no me deje cambiar otros campos ya que como en la tabla Inserted tiene el mismo DNI que en la tabla Clientes me rebota y me dice que esta repetido(lo que es lógico). Repito, para mi es mejor la solucion trigger after, es mas simple y facil de implementar y entender ;)
PD: gracias por editarlo, nunca puse codigo, asi que lo puse asi, a lo bruto xD

If you're afraid to fall, you fall because you're afraid, everything is choice . . .
(Este mensaje fue modificado por última vez en: 26-02-2015 22:37 por aleixen.)
26-02-2015 22:35
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
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: #25
RE: [APORTE] [Gestión de Datos] Final 26/02/2013
no es un error igual, la ejecucion del update tiene que ser atómica (o se hace todo o nada), imaginate que udpateas 2 columnas, y por dejar dni duplicado esa no te la actualiza pero el resto si, te quedaría inconsistente (un udpate a la mitad)

y la integridad y consistencia son importantes para tener tu data correcta

[Imagen: v34BEFt.gif]
26-02-2015 23:16
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
chdonof Sin conexión
Empleado del buffet
FINAL DE ADR
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 19
Agradecimientos dados: 5
Agradecimientos: 13 en 7 posts
Registro en: Dec 2013
Mensaje: #26
RE: [APORTE] [Gestión de Datos] Final 26/02/2013
hola , con respecto al trigger. si haces un after, y despues en el mismo consultas la tabla q disparo el trigger no vas a traer los registros recien insertados??? en ese caso siempre pincharia la condicion del dni.

(edit:lo acabo de chequear en Mysql, si hacer after, suena logico, en el trigger ves lo q ya insertaste o updeteaste, por lo tanto verias q existe el dni)

creo q deberia ser un before o instead of.

de cualquiere manera siempre que el trigger pinche se vuelve todo para atras... de ahi creo q el V o F ... es atomico el trigger y su disparador...
(edit: recien hice un insert after y en el trigger puse un error y me borro el insert original)


Con respecto al update hay que mirar q no exista el dni en la tabla sin tener en cuenta el registro q estoy updeteando. si no en caso q el dni no cambie pincharia el update como dice alguien arriba
(Este mensaje fue modificado por última vez en: 06-02-2017 21:46 por chdonof.)
06-02-2017 20:43
Envíale un email 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)