1
resposta

MINHA RESOLUCAO

Bom dia a todos,

Primeiramente criei as três procedures.

INCLUINDO PRODUTO

CREATE OR REPLACE PROCEDURE INCLUIR_PRODUTO_EXERCICIO
(p_COD PRODUTO_EXERCICIO.COD%type, p_DESCRICAO PRODUTO_EXERCICIO.DESCRICAO%type,
p_CATEGORIA PRODUTO_EXERCICIO.CATEGORIA%type)
IS
BEGIN
    INSERT INTO PRODUTO_EXERCICIO (COD, DESCRICAO, CATEGORIA) VALUES (p_COD,
REPLACE(p_DESCRICAO,'-','>'), p_CATEGORIA);
    COMMIT;
END;

ALTERANDO PRODUTO

CREATE OR REPLACE PROCEDURE ALTERAR_PRODUTO_EXERCICIO
(p_COD PRODUTO_EXERCICIO.COD%type,p_CATEGORIA PRODUTO_EXERCICIO.CATEGORIA%type)
IS
    v_DESCRICAO PRODUTO_EXERCICIO.DESCRICAO%type;
BEGIN
    UPDATE PRODUTO_EXERCICIO SET CATEGORIA = p_CATEGORIA WHERE COD = p_COD;
    COMMIT;
END;

EXCLUINDO PRODUTO

CREATE OR REPLACE PROCEDURE EXCLUIR_PRODUTO_EXERCICIO
(p_COD PRODUTO_EXERCICIO.COD%type)
IS
    v_DESCRICAO PRODUTO_EXERCICIO.DESCRICAO%type;
    v_CATEGORIA PRODUTO_EXERCICIO.CATEGORIA%type;
BEGIN
    DELETE FROM PRODUTO_EXERCICIO WHERE COD = p_COD;
    COMMIT;
END;

Depois executei todos os comandos

EXECUTE INCLUIR_PRODUTO_EXERCICIO ('33854','Frescor da Montanha - Aroma Laranja - 1 Litro', 'Mate');
EXECUTE INCLUIR_PRODUTO_EXERCICIO ('89254','Frescor da Montanha - Aroma Uva - 1 Litro', 'Águas');
EXECUTE ALTERAR_PRODUTO_EXERCICIO ('33854','Águas');
EXECUTE EXCLUIR_PRODUTO_EXERCICIO ('89254');

Por fim o Select para verificação

SELECT * FROM PRODUTO_EXERCICIO;

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Adriano. Como vai?

Excelente resolução! Suas procedures ficaram muito bem estruturadas e a lógica aplicada foi impecável.

Gostei muito de ver que você utilizou boas práticas importantes do PL/SQL, como o %type para garantir que os parâmetros das procedures tenham exatamente o mesmo tipo de dado das colunas da tabela. Isso evita erros futuros caso a estrutura da tabela seja modificada.

Outro ponto excelente foi a sacada de usar a função REPLACE(p_DESCRICAO, '-', '>') na inserção. Como podemos ver no resultado da sua consulta, a substituição funcionou perfeitamente e limpou o padrão do texto conforme o esperado.

Apenas duas dicas rápidas de otimização e boas práticas:

  • Variáveis declaradas e não utilizadas: Nas suas procedures de alteração e exclusão, você acabou declarando as variáveis v_DESCRICAO e v_CATEGORIA logo após a palavra IS. Como elas não foram utilizadas dentro do bloco BEGIN...END, você pode removê-las para deixar o código ainda mais limpo, assim:
CREATE OR REPLACE PROCEDURE EXCLUIR_PRODUTO_EXERCICIO
(p_COD PRODUTO_EXERCICIO.COD%type) IS
BEGIN
    DELETE FROM PRODUTO_EXERCICIO WHERE COD = p_COD;
    COMMIT;
END;
  • Uso do COMMIT: No ambiente de desenvolvimento e em exercícios, colocar o COMMIT dentro da procedure funciona muito bem. No entanto, no dia a dia do mercado de trabalho, costuma ser uma boa prática deixar o COMMIT do lado de fora (em quem chama a procedure). Isso permite que, se você precisar rodar duas rotinas juntas e uma delas falhar, você consiga fazer um ROLLBACK completo de tudo de uma vez.

A sequência de testes que você realizou (incluir, alterar, excluir e consultar) provou que o seu fluxo lógico está funcionando perfeitamente. Parabéns pelo empenho e pela qualidade do código compartilhado!

Espero que possa ter lhe ajudado!