(MySQL) Я хочу обновить другую таблицу, и эта таблица имеет триггер.и я получаю ошибку «потому что она уже используется оператором» - PullRequest
0 голосов
/ 05 марта 2019

У меня есть две таблицы.

Таблица DOG

|-----------------------|
| ID | NAME | STATUS_ID |
|-----------------------|
| 1  | Tom  |  1        |
|-----------------------|

Таблица APPLICATION

|---------------------------|
| ID | DOG_ID | IS_RETURNED |
|---------------------------|
| 1  | 1      |  0          |
|---------------------------|

И у меня есть таблица представлений

select A.ID, B.ID DOG_ID, B.NAME, A.IS_RETURNED
FROM DOG A
INNER JOIN APPLICATION B
ON A.ID = B.DOG_ID

Когда я пытаюсь обновить IS_RETURNED до 1, (обновить set_table set IS_RETURNED = 1, где DOG_ID = 1), я получаю сообщение об ошибке «Не могу обновить таблицу 'DOG' в сохраненной функции / триггере, потому что она уже используется оператором, который вызвал этосохраненная функция / триггер. "

Триггеры

CREATE TRIGGER `AFTER_UPDATE_DOG` AFTER UPDATE ON `DOG`
 FOR EACH ROW BEGIN
IF NEW.STATUS_ID <> OLD.STATUS_ID AND NEW.STATUS_ID = 2 THEN
    INSERT INTO APPLICATION (DOG_ID, PAYMENT_STATUS_ID, CREATED_DATE) VALUES (NEW.ID, 2, SYSDATE());

    END IF;

    IF NEW.STATUS_ID <> OLD.STATUS_ID AND NEW.STATUS_ID = 1 THEN
    INSERT INTO APPLICATION (DOG_ID, IS_FINALISED, CREATED_DATE) VALUES (NEW.ID, 1, SYSDATE());
    END IF;
END

CREATE TRIGGER `AFTER_INSERT_DOG` AFTER INSERT ON `DOG`
 FOR EACH ROW UPDATE DOG SET AGE = NEW.ID WHERE ID = NEW.ID

CREATE TRIGGER `AFTER_UPDATE_APPLICATION` AFTER UPDATE ON `APPLICATION`
 FOR EACH ROW BEGIN
IF NEW.IS_RETURNED <> OLD.IS_RETURNED AND NEW.IS_RETURNED = 'Yes' THEN
        UPDATE DOG SET STATUS_ID = 3 WHERE ID = NEW.DOG_ID;
    END IF;
END

Какой триггер вызывает ошибку?Я пытаюсь решить проблему.Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...