MySQL Trigger, который требует поля из предыдущего события - PullRequest
1 голос
/ 20 февраля 2011

У меня есть еще один вопрос о триггере, прежде чем я объясню, я покажу вам код:

DELIMITER $$

CREATE PROCEDURE transferFunds ( receiver INT, sender INT, amount FLOAT )

BEGIN

  DECLARE senderBalance FLOAT;
  DECLARE receiverBalance FLOAT;

  SELECT balance INTO senderBalance 
    FROM accounts 
   WHERE accountNumber = sender;

  SELECT balance INTO receiverBalance 
    FROM accounts 
   WHERE accountNumber = receiver;

  SET autocommit = 0;

  UPDATE accounts
     SET balance = senderBalance - amount
   WHERE accountNumber = sender;

  UPDATE accounts
     SET balance = receiverBalance + amount
   WHERE accountNumber = receiver;

  IF senderBalance < amount THEN
    ROLLBACK;
  ELSE
    COMMIT;
  END IF;

END$$

CREATE TRIGGER transferTrigger AFTER UPDATE ON accounts
FOR EACH ROW
BEGIN

  -- Insert the Receiver and Sender and Amount to transfer_log table

END$$

Я хотел создать триггер, который бы записывал передачу, которая только что произошла, но я не могу 't потому что Trigger работает в событии на строку.Как мне это сделать, если я хочу записать событие переноса в таблицу Transfer_log и вставить номера счетов «Кому и От» и сумму перевода?

1 Ответ

0 голосов
/ 20 февраля 2011

Как вы указали в своем вопросе, триггеры работают в расчете на строку.

Вы должны выполнить запись в хранимую процедуру напрямую.Однако вы можете использовать обходной путь, хотя я не думаю, что это безопасно - особенно при работе с денежными транзакциями (как показано в ОП).

Внутри вашего хранимого процесса:

SET @TranSender = sender;
SET @TranReceiver = receiver;
...

Ивнутри вашего триггера:

INSERT log_table(Sender, Receiver...)
VALUES (@TranSender , @TranReceiver...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...