Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Trigger After Insert con Update y Where condición

Estas en el tema de Trigger After Insert con Update y Where condición en el foro de Mysql en Foros del Web. Hola amigos del foro, no había trabajado antes con triggers, solo php y necesito hacer un update a otra tabla para cambiar el estado de ...
  #1 (permalink)  
Antiguo 06/03/2015, 13:28
 
Fecha de Ingreso: junio-2003
Ubicación: La Serena - Chile
Mensajes: 29
Antigüedad: 20 años, 10 meses
Puntos: 0
Trigger After Insert con Update y Where condición

Hola amigos del foro, no había trabajado antes con triggers, solo php y necesito hacer un update a otra tabla para cambiar el estado de en 'stock' a 'vendido'.

Lo que intento hacer me da errores de sintaxis, por lo que no puedo saber si funcionará.

MI codigo

Código SQL:
Ver original
  1. DROP TRIGGER IF EXISTS `ai_ventas`;
  2. DELIMITER $$
  3. CREATE TRIGGER `ai_ventas` AFTER INSERT ON `ventas`
  4.  
  5.  FOR EACH ROW BEGIN
  6.  DECLARE producto VARCHAR(20)
  7.  
  8.  SET producto = (SELECT articulo FROM ventas WHERE id = NEW.id);
  9.                  
  10.   IF producto NOT NULL THEN
  11.  
  12.      UPDATE inventario WHERE  inventario.articulo == producto
  13.      SET inventario.estado = Vendido
  14.  
  15.   END IF;
  16.  
  17. END$$
  18. DELIMITER ;
  #2 (permalink)  
Antiguo 06/03/2015, 13:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Trigger After Insert con Update y Where condición

Estás confundiendo la sintaxis de SQL con la de PHP, omitiendo los terminadores de sentencia, y además ni siquiera respetas la sintaxis del UPDATE....
Es evidente que te disparará errores de sintaxis.

Mira:
1) Los operadores lógicos en SQL son contextuales, por lo que no existe el "==" para comparar un valor contra un campo. Es el "=". Lo mismo que para la asignación, no hay diferenciación sintáctica del uso, sino contextual.
2) Toda sentencia en una rutina almacenada termina igual que en cualquier otra circunstancia: con ";", y no lo estás poniendo al final del UPDATE.
3) La sintaxis de una sentencia SQL es estricta: El WHERE no puede estar antes del SET, lo mismo que en el SELECT no podría estar antes del FROM. Eso es un error elemental.
4) Si "Vendido" es una palabra, debe ir como cadena de texto, con apóstrofos.
5) Cuando quieras comparar el estado de algo contra NULL, se usa IS NULL o IS NOT NULL. Poner solamente NOT NULL no significa nada, se usa en la definición de columnas en el CREATE TABLE, nada más, y disparará un error de sintaxis.

Todo esto, mas allá de que estás complicando innecesariamente la sintaxis...

Código MySQL:
Ver original
  1. DROP TRIGGER IF EXISTS `ai_ventas`;
  2. DELIMITER $$
  3.  
  4. CREATE TRIGGER `ai_ventas` AFTER INSERT ON `ventas`
  5.  
  6.  
  7.   UPDATE inventario I
  8.      SET I.estado = 'Vendido'
  9.   WHERE  I.articulo = (SELECT articulo FROM ventas WHERE id = NEW.id);
  10.  END$$
  11.  DELIMITER ;

Te sugiero usar una interfaz con corrector sintáctico, como por ejemplo MySQL Workbench, para evitar estos problemas básicos de codificación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/03/2015, 16:53
 
Fecha de Ingreso: junio-2003
Ubicación: La Serena - Chile
Mensajes: 29
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Trigger After Insert con Update y Where condición

gnzsoloyo, Agradezco tus comentarios, tirón de orejas y las buenas explicaciones que me has dado. Me prometo profundizar en el tema, es la primera vez que utilizo sql.

Tu corrección funcionó a la perfección, no he encontrado un buen tutorial y las especificaciones en Mysql suelen ser muy técnicas para un aprendiz. Solo me asalta el temor de un error si no encuentra el dato o el campo es null. Como puedo manejar los errores para que de un warning y no se cuelgue el sistema?

Por ultimo debo hacer una copia de cada tabla para usarla como audit.
Es posible hacerlo con un trigger, para que copie a la tabla_audit, la fila completa que se acaba de insertar? Algún ejemplo por favor.

Un saludo desde Chile

Etiquetas: condición, insert, php, select, sql, tabla, trigger, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:34.