elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
07 Septiembre 2008, 05:48  



+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderadores: дٳŦ٭, Red Mx)
| | |-+  Duda con el uso de triggers en Mysql (Detener un insert)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Duda con el uso de triggers en Mysql (Detener un insert)  (Leído 388 veces)
Soul Lost
GNU/Linux

Desconectado Desconectado

Mensajes: 2.450



Ver Perfil WWW
Duda con el uso de triggers en Mysql (Detener un insert)
« en: 26 Enero 2008, 18:00 »

Eso, estoy usando un trigger pero quisiera saber si es posible detener un insert mediante la evaluación de una condición de dicho disparador, en sqlserver podíamos hacer uso de disparadores y transacciones al mismo tiempo, pero leyendo la documentación de mysql dice que no es posible usar un ROLLBACK en un disparador, alguien sabe cuál sería la posible solución?

Saludos!! ;)
En línea

Siempre hay algo nuevo que aprender
Mi NUEVO BLOG: soullost.org
P[i]

Desconectado Desconectado

Mensajes: 432


www.SinLaMula.com - stage6.divx.com


Ver Perfil WWW
Re: Duda con el uso de triggers en Mysql (Detener un insert)
« Respuesta #1 en: 28 Enero 2008, 16:24 »


  Bueno, no se exactamente lo que quieres hacer, pero puedes meterle check a la tabla para verificar datos no, ya no te haria falta triger, aunque como lla dije no se que es lo que quieres hacer exactamente, pero para los insert si prepras bien la tabla antes no deberias tener problema, no??. Si esto no te vales podrias especifcar para que quieres el triger exactamente.
 saludos.
En línea

Soul Lost
GNU/Linux

Desconectado Desconectado

Mensajes: 2.450



Ver Perfil WWW
Re: Duda con el uso de triggers en Mysql (Detener un insert)
« Respuesta #2 en: 28 Enero 2008, 20:34 »

Tengo dos tablas: Ventas y Productos:

Código:
+--------------+----------+------+-----+---------+-------+
| Field        | Type     | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+-------+
| Codigo       | int(11)  | NO   | PRI |         |       |
| Descripccion | char(30) | NO   |     |         |       |
| Precio       | float    | NO   |     |         |       |
| Existencia   | int(11)  | NO   |     | 0       |       |
+--------------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| Folio    | char(30) | NO   | PRI |         |       |
| Codigo   | int(11)  | NO   | PRI |         |       |
| Cantidad | int(11)  | NO   |     |         |       |
| Precio   | float    | NO   |     |         |       |
+----------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)



El uso del trigger (disparador) lo uso para cuando una nueva venta se realza y se ingresa en la base de datos, al mismo tiempo disminuya la existencia del producto respecto a la cantidad del mismo que se haya vendido. En el trigger existe una condición donde se verifica lo siguiente:

Código:
        DECLARE num Integer;

        select PRODUCTO.Existencia into num from PRODUCTO where PRODUCTO.Codigo = NEW.Codigo;

        IF num > NEW.Cantidad THEN

                update PRODUCTO set Existencia=Existencia-NEW.Cantidad where PRODUCTO.Codigo = NEW.Codigo;

        END IF;

El problema viene cuando  a pesar de que la existencia sea menor a la cantidad que quiera vender, el registro se ingresa y por lo tanto, la existencia no se ve afectada. Lo decía al principio del tema, en sqlserver se puede detener la inserción del registro con un ROLLBACK, pero en mysql no es posible.
En línea

Siempre hay algo nuevo que aprender
Mi NUEVO BLOG: soullost.org
P[i]

Desconectado Desconectado

Mensajes: 432


www.SinLaMula.com - stage6.divx.com


Ver Perfil WWW
Re: Duda con el uso de triggers en Mysql (Detener un insert)
« Respuesta #3 en: 01 Febrero 2008, 16:40 »

  Sorry por tardar tanto, pero tenia un trancazo y no tenia ganas de estar delante del ordenador.
  La documentacion es clara http://dev.mysql.com/doc/refman/5.0/en/routine-restrictions.html no se puede usar rollback en un trigger con mysql, como tu dijiste.
  Por desgracia para tu caso solo queda la programacion, por lo menos hasta lo que yo se de sql, pero puedes preguntar en el foro oficial de mysql haber si te pueden dar una alternativa al rollbak para tu caso, esponle tu codigo, asi te contestan antes.
  Sorry por no poderte ser de mas ayuda y perdona tambien por tardar tanto en contestar.
En línea

P[i]

Desconectado Desconectado

Mensajes: 432


www.SinLaMula.com - stage6.divx.com


Ver Perfil WWW
Re: Duda con el uso de triggers en Mysql (Detener un insert)
« Respuesta #4 en: 14 Febrero 2008, 16:20 »

Bueno creo que tarde pero al final encontre una posible solucion. No utilice trigger pero utilice procedimientos que tambien se ejecuta en bd. Bueno te dejo el procedure aqui por si a alguien le hace falta.
Código:
#DROP PROCEDURE Insertar_Ventas;

delimiter //
CREATE PROCEDURE Insertar_Ventas(IN Folio char, IN Cod int, IN Cantidad int, IN Precio float )
BEGIN
  declare num INT;
  SELECT producto.existencia INTO num FROM producto WHERE producto.codigo = Cod;
  IF num-cantidad >= 0 THEN
    insert into venta values (Folio,Cod,Cantidad,Precio);
    update producto set existencia=existencia-Cantidad;
  END IF;
END;
//

call Insertar_Ventas(1,1,3,10.2);

Saludos.
En línea

Hans el Topo

Desconectado Desconectado

Mensajes: 1.688


"Estoy cansado de no hacer nada"


Ver Perfil WWW
Re: Duda con el uso de triggers en Mysql (Detener un insert)
« Respuesta #5 en: 14 Febrero 2008, 20:04 »

hace tiempo que no utilizo triggers, veamos si me acuerdo,
los triggers se puedes disparar antes y después de un insert,
por lo tanto la comprobación la haces antes y no después como estabas haciendo

pon la cabecera del trigger

En línea

Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC