MYSQL Trigger Update no funciona como se suponía

He creado un activador de actualización en MySQL Community Server 5.5.16 pero cuando intento actualizar la declaración: Update Account set credit = 100 Where Number = 14001455; Aparece un error "ERROR 1172 (42000): el resultado consta de más de una fila". No entiendo por qué recibo este error y qué está mal con mi código:

delimiter |
CREATE TRIGGER t_creditexceed AFTER UPDATE ON Account
FOR EACH ROW
BEGIN 
    DECLARE n_overdraft INTEGER;
    DECLARE n_balance INTEGER;
    DECLARE n_number INTEGER;
    DECLARE n_credit INTEGER;
    DECLARE credit_exception condition for SQLSTATE '07030';

    SELECT balance, credit, number INTO n_balance, n_credit, n_number
    FROM Account;
    IF ((n_balance < (-n_credit)) AND (n_balance >= 1.1 * (-n_credit)))
    THEN
    SET n_overdraft = n_balance + n_credit;
    INSERT INTO overdraft (account_no, over_draft) VALUES (n_number, n_overdraft);
    END IF;
    IF (n_balance < 1.1 *(- n_credit))
    THEN signal credit_exception;
    END IF;
END;
|
delimiter ;

preguntado el 01 de febrero de 12 a las 14:02

3 Respuestas

Esta consulta:

SELECT balance, credit, number INTO n_balance, n_credit, n_number
FROM Account;

no tiene una cláusula WHERE, por lo que debería seleccionar ALL Account registros en variables, que es de donde proviene el mensaje de error. La selección de variables solo funciona cuando tiene una sola fila de resultados; con varias filas, MySQL no tiene forma de saber qué fila desea fuera del conjunto de resultados. No elegirá por ti.

Respondido 01 Feb 12, 18:02

Creo que tu problema es la declaración: SELECT balance, credit, number INTO n_balance, n_credit, n_number FROM Account; - probablemente devuelve más de 1 fila y, por lo tanto, MySQL no puede cargar los valores en las variables que definió.

No estoy seguro de tu intención, pero tal vez estabas buscando NEW. y OLD. ¿valores?

Respondido 01 Feb 12, 18:02

El "saldo, crédito, número seleccionado" inicial devuelve más de una fila.

Respondido 01 Feb 12, 18:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.