1
resposta

MINHA RESOLUÇÃO

Bom dia a todos,

Incluindo o produto com a utilização do %type

DECLARE
    v_COD PRODUTO_EXERCICIO.COD%type := '32223';
    v_DESCRICAO PRODUTO_EXERCICIO.DESCRICAO%type := 'Sabor de Verão - Uva - 1 Litro';
    v_CATEGORIA PRODUTO_EXERCICIO.CATEGORIA%type := 'Sucos de Frutas';
BEGIN 
    INSERT INTO PRODUTO_EXERCICIO VALUES (v_COD, v_DESCRICAO, v_CATEGORIA);
    COMMIT;
END;

Conferência se deu certo

SELECT * FROM PRODUTO_EXERCICIO;

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

1 resposta

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!