Bom dia, Adriano! Como vai?
Parabéns pela excelente resolução da atividade! O seu bloco anônimo em PL/SQL está impecável e a conferência com o SELECT provou que os dados foram inseridos com sucesso e persistidos corretamente no banco com o COMMIT.
O grande destaque do seu projeto foi o uso correto do modificador %TYPE. Essa é uma das melhores práticas no desenvolvimento com Oracle PL/SQL por dois motivos principais:
- Manutenibilidade do Código: Se amanhã o administrador do banco de dados (DBA) precisar alterar o tamanho da coluna
DESCRICAO de VARCHAR2(50) para VARCHAR2(100), o seu código não vai quebrar e você não precisará mudar uma única linha dele. O PL/SQL descobre e herda o novo tipo dinamicamente em tempo de execução. - Segurança e Prevenção de Erros: Evita os clássicos erros de estouro de buffer ou incompatibilidade de dados (como o
ORA-06502: PL/SQL: numeric or value error), já que a variável nasce com o molde exato da coluna da tabela.
Como você está avançando bem no conteúdo, vale a pena conhecer um irmão do %TYPE para quando você começar a lidar com linhas completas: o %ROWTYPE.
Enquanto o %TYPE herda a estrutura de uma única coluna, o %ROWTYPE cria uma estrutura de registro (como se fosse um objeto) que herda todas as colunas de uma tabela de uma vez só. Se você quisesse fazer uma consulta completa para carregar o produto que você acabou de inserir, o seu código ficaria muito mais enxuto:
DECLARE
-- v_produto passa a ter as propriedades .COD, .DESCRICAO e .CATEGORIA automaticamente
v_produto PRODUTO_EXERCICIO%rowtype;
BEGIN
SELECT * INTO v_produto
FROM PRODUTO_EXERCICIO
WHERE COD = '32223';
-- Para acessar os valores, basta usar o ponto (.)
DBMS_OUTPUT.PUT_LINE('Produto encontrado: ' || v_produto.DESCRICAO);
END;
Dominar essas formas de tipagem dinâmica é o que separa um programador SQL comum de um desenvolvedor PL/SQL especialista. Você pegou o conceito perfeitamente!
Espero que possa ter lhe ajudado!