2016-09-12 3 views
1

Рассмотрим таблицу TRADE_ORDERS.Ошибка MYSQL 1442: невозможно обновить таблицу в триггере/хранимой процедуре

Symbol | Type | Count | Settled | Settled_count 
------ | -----| ------| --------| ------------- 
Apple | BUY | 100 | NO  | 0 
Apple | BUY | 50 | NO  | 0 

Я написал триггер, который будет after_trade_orders_insertAFTER INSERT новой строки будет пытаться урегулировать предыдущие заказы в зависимости от если имеются неурегулированные заказов.

Теперь, если я INSERT в TRADE_ORDERS строка со значениями Apple, SELL, 150, она должна оплатить все купленные акции. Поэтому предполагаемое действие должно привести к тому, что таблица будет ниже состояния.

Предусмотренное Выход

Symbol | Type | Count | Settled | Settled_count 
------ | -----| ------| --------| ------------- 
Apple | BUY | 100 | YES  | 100 
Apple | BUY | 50 | YES  | 50 
Apple | SELL | 150 | YES  | 150 

Я понимаю, как писать код в MySQL, чтобы достичь. Но когда я пишу код, чтобы сделать это в after_trade_orders_insert, он терпит неудачу с ошибкой

Код ошибки: 1442. Не удается обновить таблицу «NSE_FO» в хранимой функции/триггера, так как он уже используется заявление, которое вызывается этим хранимая функция/триггер. 0.055 сек.

Я понимаю, что это за ошибка и почему это происходит.

Вопрос: Как достичь ожидаемого результата?

ответ

0

Мы не можем делать то, что хотим - Триггер/Хранимая процедура не может обновить другую строку той же таблицы, что и строка, из которой был вызван триггер.

Как это достичь? Из принятого ответа на этот thread

Типичный способ сделать это, чтобы создать хранимую процедуру, которая вставляет в/обновления целевой таблицы, а затем обновляет другую строку (ы), все транзакции.

0

Вы не можете обновить недавно вставленную строку в таблице с помощью триггера, поэтому вам нужно использовать предложение where с новым ключевым словом.

+0

Ok. Но разрешено ли мне обновлять любые другие строки одной таблицы? – bobdiya

+0

, но он не может обновить вновь вставленную строку, для которой вы используете триггер. –

+0

Если я намереваюсь обновить некоторые другие строки одной таблицы. Как мне это достичь? – bobdiya

Смежные вопросы