Транзакции в хранимых процедурах MySql - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь использовать транзакцию в хранимой процедуре MySQL.

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

Я создал приведенный ниже код, который при выполнении возвращает строку «транзакция завершилась успешно».

Однако фактически ничего не обновляется и временная записьНе удаляется.

Оба SQL-оператора, когда выполняются отдельно, работают отлично. Первый обновляет, второй удаляет.

Может кто-нибудь просветить меня, что может быть не так??

BEGIN 

-- set a default response
DECLARE response varchar(48) DEFAULT "the transaction has failed.";


DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN

    ROLLBACK;
    -- set vars

    SET response = "the transaction has failed, you may have already updated the account.";
    select response;

    END;


START TRANSACTION;

    -- we are inserting data, using information from another table

    update user, updateUserNamesAndNumbers

    SET user.firstName   = updateUserNamesAndNumbers.firstName,
        user.lastName    = updateUserNamesAndNumbers.lastName,
        user.landline    = updateUserNamesAndNumbers.landline,
        user.mobile      = updateUserNamesAndNumbers.mobile

    WHERE 

        updateUserNamesAndNumbers.uuid = transferCode

    AND

        updateUserNamesAndNumbers.userId= user.user_id

    ;


-- finally delete the original tuple


DELETE from updateUserNamesAndNumbers

where uuid= transferCode ;


SET response="The transaction has succeeded";

COMMIT;

ВЫБРАТЬ ответ;

END

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Я частично ответил на свой вопрос.

Спасибо P.Salmon за запрос к переменной TransferCode.

Оказывается, я определил строку как varchar (24),но входные данные на самом деле были больше.

Так что, как только я отсортировал это, код работал, но только в первый раз.

Мне все еще нужно хорошо подумать об этом, так каквторой вызов той же самой подпрограммы с тем же входом TransferCode, где временный кортеж уже был удален первым вызовом, не вызывает исключение MySQL, как я и думал.Таким образом, «все еще думающая кепка на времени»

0 голосов
/ 04 октября 2018

Изменить неявное соединение на явное соединение

 update user join updateUserNamesAndNumbers on updateUserNamesAndNumbers.uuid = transferCode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...