TRIGGER DELETE

23/06/2004 - 11:06 por Celeste | Informe spam
Hola, tengo un trigger de delete que comprueba que para poder borrrar el
registro cumple unas condiciones (que no sea el ultimo con un código
determinado, que no este dado de baja...), es decir muchas comprobaciones,
si yo hago un delete from tabla1 where cod =1 ; me hace las comprobaciones,
es decir, salta el trigger.
El problema es si hago un delete from tabla1.

no salta el trigger y los elimina todos.

¿porque ocurre esto?
¿que debo hacer?
¿deberia usar un cursor??


gracias.

Preguntas similare

Leer las respuestas

#21 Celeste
24/06/2004 - 09:09 | Informe spam
hola


Probaste tu el que te envié con 2 tablas ( otra_lili_test
y lili_test ) y un delete from lili_test?????


¿te eliminó la tabla otra_lili_test entera o no???

Y como dices que mi DELETE afecta MAS de una fila, realizará TODO por cada
fila eliminada..


Un saludo.
Respuesta Responder a este mensaje
#22 Celeste
25/06/2004 - 12:06 | Informe spam
Hola Javier:

¿como puedo trabajar con CONJUSTO DE DATOS??


no se si has leido mi mensaje anterior y me gustaria saber si podria
utilizar lo que tu me has dicho (conjunto de datos ) con el problema que
tengo.

Muchas gracia.s
Respuesta Responder a este mensaje
#23 Carlos Sacristan
25/06/2004 - 12:25 | Informe spam
Celeste, en otras respuestas se te ha comentado porqué sólo contiene (en
el ejemplo que pasaste) el valor 10: porque es el último, la variable va
actualizándose con los valores de la tabla y sólo puede mantener uno a la
vez...

En cuanto a lo de si estás obligada a utilizar o no cursores, no estoy
de acuerdo contigo. ¿Has pensado en que en vez de implementar todo ese
código en un trigger, realizarlo en un procedimiento almacenado?. Yo creo
que los trigger son útiles en contadas ocasiones (mantener un contador o
cosas muy concretas), pero implementar las reglas de negocio como las que
comentas ahí... En esos casos creo que dan bastantes quebraderos de cabeza.

Además, hacerlo en un procedimiento tiene otra ventaja: ahora mismo
estás obligada a dar permisos de borrado directamente sobre la tabla, y una
de las cosas que se recomiendan es NO dar permisos de ningún tipo
directamente sobre las tablas, sino sobre los objetos que acceden a ellas.
De esa forma tienes un control mucho mayor de cómo son tratados los datos.




Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Celeste" escribió en el mensaje
news:uuGV#
Hola.

Lo primero me confuní al enviar el trigger (debería ser FOR en lugar de
INSTEAD OF).

Lo que tu me comentas que sólo borra de otra_lili_test la que tiene el valor
10 ¿porque??

Despues de estos comentarios de todo el mundo, lo que mas me ha ayudado ha
sido la explicación de que Sql es sobre conjuntos de datos.

He cambiado mi trigger y he metido un cursor ya que si no, no funciona lo
que yo necesito.

Comprobar que el objeto esta de baja o es la última fila es una comprobación
importante que realizo, pero la mas importante es tener la otra tabla
(ubicaciones) actualizada con los valores que dejo en la tabla origen
(movimientos).

Movimientos es un historial y ubicaciones es la situación correcta actual.
Si yo hago un delete de movimientos where fecha > 01/01/2000, en ubicaciones
me deberá dejar la situación real que había con fecha 31/12/1999, pero sin
usar cursores esto no funciona. Lo borra todo y la otra tabla la deja como
estaba.


En informix funcionaba perfectamente bien ya que realizaba la actualizaicón
en cada fila, pero ahora no.
Aunque me comentasteis no usar cursores, no me queda otro remedio.

Muchas gracias por aclararme lo del conjunto de datos desconocía eso y nunca
me había parado a pensar que en otros motores se crean cursores internos.


Un saludo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida