2012-09-18 14 views
6
delimiter $$ 
CREATE TRIGGER REDUCE_NOTE_COUNT 
AFTER DELETE ON iv_notes 
FOR EACH ROW BEGIN 
DECLARE supplierid int(11); 
DECLARE customerid int(11); 

SELECT supplierid ,customerid FROM iv_documents WHERE id=OLD.note_documentid; 
SET supplierid=supplierid; 
SET customerid=customerid; 

IF supplierid=OLD.note_companyid THEN 
    update iv_documents 
      set supplier_notes=supplier_notes-1 
      where id=OLD.note_documentid and supplier_notes>0; 
END IF; 
IF customerid=OLD.note_companyid THEN 
    update iv_documents set customer_notes=customer_notes-1 
      where id=OLD.note_documentid 
      and customer_notes>0 ; 
END IF; 
END$$ 

delimitador;no permitido devolver un conjunto de resultados desde un disparador mysql

+2

nuevo consejo de usuario: por favor, gente, HAGA la pregunta, no es obvio lo que está pidiendo. Incluya la versión que usa y posiblemente un mensaje de error :) –

Respuesta

20

No se pueden ejecutar sentencias SELECT desde el desencadenador. Si desea establecer variables, utilice la instrucción SELECT INTO, p. -

DECLARE supplierid_ INT(11); 
DECLARE customerid_ INT(11); 

SELECT 
    supplierid, customerid 
INTO 
    supplierid_, customerid_ 
FROM 
    iv_documents 
WHERE 
    id = OLD.note_documentid; 

IF supplierid_ = OLD.note_companyid THEN 
... 

Además, cambie el nombre de las variables, tienen que diferir de los nombres de los campos.

+0

gracias. Funciona – Tarika

+0

Acepte la respuesta si está bien. – Devart

Cuestiones relacionadas