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;