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

fallo en trigger

Estas en el tema de fallo en trigger en el foro de Mysql en Foros del Web. Hola, queria hacer un trigger, que dependiendo del valor de 'did', hiciera una ocsa u otra (en este caso, sumar ó restar), pero da fallo ...
  #1 (permalink)  
Antiguo 11/08/2009, 14:03
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 18 años, 11 meses
Puntos: 0
Pregunta fallo en trigger

Hola, queria hacer un trigger, que dependiendo del valor de 'did', hiciera una ocsa u otra (en este caso, sumar ó restar), pero da fallo en la linea 4. Lo he estado revisando, pero no se donde esta el fallo, he de decir que tengo muy pocos conocimientos de triggers, y este lo hice a partir de lo que pude entender de la pagiona de mysql.

Código PHP:
CREATE TRIGGER tvp_scon BEFORE INSERT ON pos_tpv
 
FOR EACH ROW BEGIN
IF NEW.did 0 THEN
  update pos_stock set cta 
=cta-NEW.cta WHERE (pidlocal) = (NEW.pid, NEW.local);
       ELSEIF NEW.
did 1 THEN
           update pos_stock set cta 
=cta+NEW.cta WHERE (pidlocal) = (NEW.pid, NEW.local);
       
END IF; 

Aqui les dejo el error:
Código PHP:
Error

consulta SQL


CREATE TRIGGER tvp_scon BEFORE INSERT ON pos_tpv
FOR EACH
ROW BEGIN 
IF NEW.did =0
THEN 
UPDATE pos_stock SET cta 
cta - NEW.cta WHERE (
pid,
LOCAL 
) = ( NEW.pid, NEW.local ) ;



MySQL ha dicho:  
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4 
Si alguien me puede ayudar, se lo agradezco.
  #2 (permalink)  
Antiguo 11/08/2009, 15:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: fallo en trigger

Código sql:
Ver original
  1. delimiter &&
  2. CREATE TRIGGER tvp_scon BEFORE INSERT ON pos_tpv
  3.  FOR EACH ROW BEGIN
  4. IF NEW.did = 0 THEN
  5.   UPDATE pos_stock SET cta =cta-NEW.cta WHERE (pid, LOCAL) = (NEW.pid, NEW.LOCAL);
  6. ELSEIF NEW.did = 1 THEN
  7.   UPDATE pos_stock SET cta =cta+NEW.cta WHERE (pid, LOCAL) = (NEW.pid, NEW.LOCAL);
  8. END IF;
  9. END&&
  10. delimiter ;

así?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 11/08/2009, 17:42
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: fallo en trigger

Hola, me da otro error
Código:
consulta SQL: 

delimiter && CREATE TRIGGER tvp_scon BEFORE INSERT ON pos_tpv
FOR EACH
ROW BEGIN 
IF NEW.did =0
THEN 
UPDATE pos_stock SET cta = cta - NEW.cta WHERE (
pid,
LOCAL 
) = ( NEW.pid, NEW.LOCAL ) ;



MySQL ha dicho:  
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimiter &&
CREATE TRIGGER tvp_scon BEFORE INSERT ON pos_tpv 
FOR EACH ROW B' at line 1
He probado a cambiar los && por //, y en el 'end&&' por 'end;//'. Pero me da otro error.

Espero q alguien me pueda indicar donde estar el fallo.

salu2
  #4 (permalink)  
Antiguo 11/08/2009, 18:03
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, 5 meses
Puntos: 2658
Respuesta: fallo en trigger

SI lo que has puesto es una muestra de lo que escribiste, el errror es que no estás respetando las líneas.
DELIMITER && y CREATE... corresponden a lineas distintas.

Podrías decirnos qué estás usando para ingresar el TRIGGER: ¿MySQL Query Browser, consola de MySQL, PhpMyAdmin, Navicat...?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 12/08/2009, 03:14
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: fallo en trigger

phpmyadmin

Pero antes he creado otros triggers, sin condicionales, en las que lo ponia directamente con el CREATE..., y me funcionaba.

salu2
  #6 (permalink)  
Antiguo 12/08/2009, 05:28
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, 5 meses
Puntos: 2658
Respuesta: fallo en trigger

Si el TRIGGER o el STORED ROCEDURE tienen una sola línea, no hay problema.
En el caso del PhpMyAdmin, en la ventana de SQL tienes abajo donde colocar el simbolo de delimitador, es un TextBox que se usa para eso, en el que habitualmente aparece el ";" normal.
Lo que debes hacer es escribir todo el código así:
Código sql:
Ver original
  1. CREATE TRIGGER tvp_scon BEFORE INSERT ON pos_tpv
  2.  FOR EACH ROW BEGIN
  3. IF NEW.did = 0 THEN
  4.   UPDATE pos_stock P SET cta =cta-NEW.cta WHERE P.pid = NEW.pid AND P.`LOCAL` = NEW.`LOCAL`;
  5. ELSEIF NEW.did = 1 THEN
  6.   UPDATE pos_stock P SET P.cta =P.cta+NEW.cta WHERE P.pid = NEW.pid AND P.`LOCAL` = NEW.`LOCAL`;
  7. END IF;
  8. END&&
Y en el TextBox de Delimitador poner "&&"

Además, si puede haber un par de errores, ya que esto: (pid, LOCAL) = (NEW.pid, NEW.LOCAL), hasta lo que se, no es válido en MySQL, y además estás usando palabras reservadas como nombres de campo, lo que da lugar a errores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 12/08/2009, 05:37
 
Fecha de Ingreso: mayo-2005
Mensajes: 51
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: fallo en trigger

Ya funciona muchas gracias.

Al usar casi sieempre elementos simples de 1 linea, nunca habia usado delimiter. Me tocara mirarme mas cosas al respecto. Mucha gracias :D
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 01:55.