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

Ayuda con un procedimiento

Estas en el tema de Ayuda con un procedimiento en el foro de Mysql en Foros del Web. Buenas tengo un problema y no hay manera de sacarlo, os explico quiero hacer dos triggers sobre una tabla, uno cuando actualize y otro cuando ...
  #1 (permalink)  
Antiguo 08/07/2010, 11:30
 
Fecha de Ingreso: octubre-2005
Mensajes: 18
Antigüedad: 19 años, 1 mes
Puntos: 1
Ayuda con un procedimiento

Buenas tengo un problema y no hay manera de sacarlo, os explico

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:
	CALL insertar(new.planta, new.inicio, new.dispositivo, new.idevento, new.alarma);
y en el procedimiento hago lo siguiente:

Código:
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$$
os explico un poco el prociemiento,

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

Etiquetas: procedure, sql, trigger
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 05:57.