Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tigredonorte

Controle de estoque - Problema ao verificar condição de rollback

Recommended Posts

Olá a todos. Estou com um problema ao fazer uma transaction: Não consigo verificar a condição de rollback (possivelmente não entendi bem como as transaction funcionam). Se alguém puder me dar uma luz eu agradeço.

link do sqlfiddle: http://sqlfiddle.com/#!2/1a1edc/1

_______________________________________
Para quem não quiser ver no sqlfiddle: código sql que estou tentando executar (mas aqui não tem o esquema de dados):
SET AUTOCOMMIT=0;
START TRANSACTION;
UPDATE `dcoracoes_produto` SET `estoque` = `estoque` - 11 WHERE `cod` = '1'; UPDATE `dcoracoes_item` SET `total` = ( SELECT `preco` FROM `dcoracoes_produto` WHERE `cod` = '1') ;
UPDATE `dcoracoes_produto` SET `estoque` = `estoque` - 2 WHERE `cod` = '2'; UPDATE `dcoracoes_item` SET `total` = ( SELECT `preco` FROM `dcoracoes_produto` WHERE `cod` = '2') ;
UPDATE `dcoracoes_pedido` SET `total` = ( SELECT SUM(`total` * `quantidade`) FROM `dcoracoes_item` WHERE `pedido` = '1' ), `data` = NOW() WHERE `cod` = '1' ;
SELECT count(*) FROM `dcoracoes_produto` WHERE estoque < 10 INTO @total;
IF (@total = 0) THEN
COMMIT;
ELSE
ROLLBACK;
SET AUTOCOMMIT=1 ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá tigredonorte, boa tarde.

 

A forma com que você esta setando a variável @total não esta certa, use:

SELECT count(*) INTO @total FROM `dcoracoes_produto` WHERE estoque < 10; 

Veja se funciona.

 

Abraços.

 

_ _

Fabiano Abreu

Papo SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabiano, o problema não parece estar na variável em si.
Parece que é um problema de sintaxe dentro do if. Apareceu o seguinte erro:

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (@total = 0) THEN COMMIT' at line 1:

 

(O erro ocorreu tanto antes quanto depois da alteração que você propos). Além disto, para ambos os códigos (a sintaxe que coloquei acima e a sintaxe que você sugeriu) se eu retirar o if, a query funciona

 

SET AUTOCOMMIT=0; START TRANSACTION; ;
UPDATE `dcoracoes_produto` SET `estoque` = `estoque` - 11 WHERE `cod` = '1'; UPDATE `dcoracoes_item` SET `total` = ( SELECT `preco` FROM `dcoracoes_produto` WHERE `cod` = '1') ;
UPDATE `dcoracoes_produto` SET `estoque` = `estoque` - 2 WHERE `cod` = '2'; UPDATE `dcoracoes_item` SET `total` = ( SELECT `preco` FROM `dcoracoes_produto` WHERE `cod` = '2') ;
UPDATE `dcoracoes_pedido` SET `total` = ( SELECT SUM(`total` * `quantidade`) FROM `dcoracoes_item` WHERE `pedido` = '1' ), `data` = NOW() WHERE `cod` = '1' ;
SELECT count(*) INTO @total FROM `dcoracoes_produto` WHERE estoque < 10; 
COMMIT; 
SET AUTOCOMMIT=1 ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.