quiero hacer dos triggers sobre una tabla, uno cuando actualize y otro cuando inserte, en ambos hago la misma logica y por ello he pensado en hacerme un procedimiento o funcion (no se que es mejor para este caso), pues bien en los triggers hago la llamada al procedimiento con
Código:
y en el procedimiento hago lo siguiente:CALL insertar(new.planta, new.inicio, new.dispositivo, new.idevento, new.alarma);
Código:
os explico un poco el prociemiento,CREATE DEFINER=`root`@`%` PROCEDURE `insertar`( IN planta INT (11), IN inicio TIMESTAMP, IN dispositivo VARCHAR(100), IN idevento INT(11), IN alarma INT(11) ) BEGIN DECLARE tabla_mantenimiento VARCHAR(100) DEFAULT ''; DECLARE instalacion INT(10) DEFAULT 0; SET @q_tbl_mantenimiento:=CONCAT(' SELECT e.tabla_mantenimiento, e.id FROM empresa e, planta p WHERE e.id=p.empresa AND p.id=',planta); SELECT @q_tbl_mantenimiento INTO @tabla_mantenimiento,@instalacion; /* sacamos la tabla de mantenimiento de la instalacion*/ SET @q_existe_evento:=CONCAT(' SELECT COUNT(id_evento) FROM ',@tabla_mantenimiento,' WHERE DATE_FORMAT(fecha,"%d-%m-%Y") LIKE DATE_FORMAT(',inicio,',"%d-%m-%Y") AND id_propietario=',planta); SELECT @q_existe_evento INTO @exite_evento; /* miramos si existe el evento ese dia */ IF (@exite_evento=0) THEN SET @q_texto:=CONCAT(' SELECT texto_email AS descripcion, CONCAT(texto_sms," ",',dispositivo,') AS concepto FROM alarma a WHERE a.id=new.planta'); SELECT @q_texto INTO @descripcion, @concepto; /* cogemos los textos para la tarea */ SET @q_insert:=CONCAT(' INSERT INTO tabla_mantenimiento (concepto,fecha,id_instalacion,id_propietario,id_evento,descripcion) VALUES ("',@concepto,'","',inicio,'",',@instalacion,',',planta,',',idevento,',"',@descripcion,'"'); SELECT @q_insert; /* insertamos la nueva tarea */ END IF; END$$
1.- en la tabla empresa tengo un campo con el nombre de la tabla donde se van a guardar unas tareas y su id correspondiente y lo quiero guardar en dos variables para usarlas luego
2.- compruebo que el idevento no ha ocurrido hoy con el segundo 'select'
3.- si no ha ocurrido recojo el texto de otra tabla e inserto en la tabla que recupere en el primer 'select'
bueno, pues me dice que hay error, y se cual es, ¿entoces para que preguntas? pues porque no lo he podido solucionar
se que el error esta en que no se hace con 'select' ya que eso lo que hace es pasar el valor literal de la variable y no sus resultado, tendria q usar execute y prepare, pero no se como recoger los valores usandolo, asi que hay va por fin la pregunta
¿como consigo recoger los valores de unos select en una variable?
no vale que me digais con @ puesto que cuando pongo
select * from @variable, me dice q tampoco vale
y si pongo
select *from variable, me dice q la tabla variable no existe asi que ¿como lo hago?
Saludos