MySQL Forums
Forum List  »  Spanish

Error #1442 en trigger
Posted by: Nocy tas
Date: February 25, 2015 03:44AM

Hola

Tengo una tabla que ademas de los datos normales, contiene un campo denominado 'predeterminado' del tipo Tinyint definido a 0 y que utilizo para determinar cual de los registros de esta tabla sera el que este marcado como predeterminado (valor=1), pudiendo ser solamente un unico registro el que tenga el valor a 1 y el resto tienen que estar obligatoriamente a 0.

Este dato es el que se utilizara en una aplicacion en caso de que el usuario no especifique otro en concreto.
nada

Para aplicar esta restricción, pense en utilizar los triggers de INSERCCION y ACTUALIZACION de la tabla de tal forma que cuando se añada o edite un registro si se modifica el valor predeterminado a 1, busque
el registro anterior con valor a 1 y lo ponga a 0


este es el triguer de actualizacion utilizado:

<code>
CREATE TRIGGER `OnUpdateTarifas` BEFORE UPDATE
ON tarifas FOR EACH ROW
thisTrigger:BEGIN
IF (@TRIGGER_CHECKS = FALSE) THEN
LEAVE thisTrigger;
END IF;

## disableTriggers();
SET @TRIGGER_CHECKS = false;
if new.`predeterminado`=1 and new.`predeterminado`<>old.`predeterminado` then
update tarifas
set `predeterminado`=0
where `predeterminado`=1 and id<>new.`id`;
end if;
END;
</code>

A pesar de insertar el trigger sin problema, al intentar cambiar el valor del campo predeterminado de cualquier registro con valor 0 a 1, MySQL me devuelve el siguiente error:

#1442 - Can't update table 'tarifas' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

En definitiva indica que el trigger intenta realizar una operacion que vuelve a llamar al propio trigger, por lo que produce un bloqueo.
Buscando información sobre los triggers, parece ser que en las ultimas versiones ya no existe la posibilidad de desabilitar temporalmente los triggers, que podria ser una de las soluciones.

A simplevista esta es una operacion relativamente simple, pero no consiguo ver como solucionarlo sin usar programacion, Alguien que pueda darme alguna pista al respecto

Un Saludo

Options: ReplyQuote


Subject
Views
Written By
Posted
Error #1442 en trigger
3134
February 25, 2015 03:44AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.