Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Desafio: ajuste de valores em bases de produtos (Resolvido)

Para resolver este desafio, precisamos fazer uma atualização nos dados do banco, usando a cláusula UPDATE. Neste caso, optei por iniciar uma transação com BEGIN TRANSACTION, pois caso haja algum erro em massa, posso utilizar um ROLLBACK para reverter tudo ao estado original.

1 - Início de transação com BEGIN TRANSACTION.

2 - As categorias dos produtos não condizem com os mesmos, então precisamos atualizar as categorias, para facilitar a atualização dos preços pelas categorias posteriormente.

3 - Com as categorias já atualizadas, fiz um random com os intervalos que o exercício pede. Neste comando:

  • random() gera um valor inteiro aleatório.
  • abs(random()) % 8000000 ajusta o valor para estar entre 0 e 7999999.
  • Dividindo por 100000.0 converte o intervalo para estar entre 0.00 e 79.99999.
  • 20 + (abs(random()) % 8000000) / 100000.0 ajusta o intervalo para estar entre 20.00 e 99.99999.
  • ROUND(..., 2) arredonda o valor para duas casas decimais.

4 - Depois de tudo testado, faço um COMMIT; para confirmar todas as alterações.

BEGIN TRANSACTION;
UPDATE produtos SET categoria_id = '5' WHERE nome_produto = 'Bola de Futebol';
UPDATE produtos SET categoria_id = '3' WHERE nome_produto = 'Chocolate';
UPDATE produtos SET categoria_id = '1' WHERe nome_produto = 'Celular';
UPDATE produtos SET categoria_id = '4' WHERe nome_produto = 'Livro de Ficção';
UPDATE produtos SET categoria_id = '2' WHERe nome_produto = 'Camisa';

UPDATE produtos 
SET preco = ROUND(20 + (abs(random()) % 8000000) / 100000.0, 2)  
WHERE categoria_id = '5';

UPDATE produtos 
SET preco = ROUND(10 + (abs(random()) % 4000000) / 100000.0, 2)   
WHERE categoria_id = '3';

UPDATE produtos 
SET preco = ROUND(80 + (abs(random()) % 492000001) / 100000.0, 2)   
WHERE categoria_id = '1';

UPDATE produtos 
SET preco = ROUND(10 + (abs(random()) % 19000001) / 100000.0, 2)   
WHERE categoria_id = '4';

UPDATE produtos 
SET preco = ROUND(80 + (abs(random()) % 12000001) / 100000.0, 2)   
WHERE categoria_id = '2';

COMMIT;
1 resposta
solução!

Olá, Douglas, tudo bem?

Que bom que você já resolveu o desafio! Sua abordagem está bem estruturada, utilizando transações para garantir a integridade dos dados e a possibilidade de rollback em caso de erro.

Douglas, continue com essa dedicação que você vai longe!

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!