Попытка использовать откат в mysql процедуре - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть mysql процедура, которая выполняет 4 запроса на вставку. Я хочу откатить их все, если хотя бы один из них не удался. Я попробовал START TRANSACTION, COMMIT и ROLLBACK безуспешно. Theres способ откатить вставки или я должен сделать запросы на удаление, чтобы отменить вставки?

BEGIN

declare id_orcamento INT;
declare orcamento_success INT DEFAULT 1;
declare modelos_success INT DEFAULT 1;
declare urgencia_success INT DEFAULT 1;
declare ida_success INT DEFAULT 1;

START TRANSACTION;

SET id_orcamento = insere_orcamento_table(id_utilizador,nome_cliente,telefone_cliente,mail_cliente,descricao_cliente,preco_portes,preco_criacao);

IF id_orcamento > 0 THEN
    -- insere modelos
    SET modelos_success = insere_modelos_table(id_utilizador, id_orcamento);

    IF modelos_success = 1 THEN
        TRUNCATE ORCAMENTOS_MATERIAIS_TEMP;
    END IF;

    -- insere os custos
    IF urgencia='sim' THEN
        INSERT INTO ORCAMENTO_CUSTOS(ID_ORCAMENTO,ID_CUSTO,PRECO_URGENCIA,PRECO_KM,IDA,VOLTA,NUM_KM,PRECO_MAO_OBRA,NUM_PESSOAS,NUM_HORAS) VALUES (id_orcamento,1,preco_urgencia,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
        SELECT ROW_COUNT() INTO urgencia_success;
    END IF;

    IF(ida='sim' AND volta IS NULL) THEN
        INSERT INTO ORCAMENTO_CUSTOS(ID_ORCAMENTO,ID_CUSTO,PRECO_URGENCIA,PRECO_KM,IDA,VOLTA,NUM_KM,PRECO_MAO_OBRA,NUM_PESSOAS,NUM_HORAS) VALUES (id_orcamento,2,NULL,(SELECT PRECO_CUSTO FROM CUSTOS WHERE ID_CUSTO = 2),1,NULL,num_km,NULL,NULL,NULL);
        SELECT ROW_COUNT() INTO ida_success;
    END IF;

    IF mao_obra='sim' THEN
        INSERT INTO ORCAMENTO_CUSTOS(ID_ORCAMENTO,ID_CUSTO,PRECO_URGENCIA,PRECO_KM,IDA,VOLTA,NUM_KM,PRECO_MAO_OBRA,NUM_PESSOAS,NUM_HORAS) VALUES (id_orcamento,3,NULL,NULL,NULL,NULL,NULL,(SELECT PRECO_CUSTO FROM CUSTOS WHERE ID_CUSTO = 3),num_pessoas,num_horas);
        SELECT ROW_COUNT() INTO urgencia_success;
    END IF;

ELSE
    SET orcamento_success = 0;
END IF;

IF (orcamento_success=1 AND modelos_success=1 AND urgencia_success=1 AND ida_success=1) THEN
    SET result = 1;
    COMMIT;
ELSE
    SET result = 0;
    ROLLBACK; 
END IF;

END

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