Registros Baseados em Tabelas e Cursores em Oracle PL/SQL

Nesse artigo vamos aprender sobre os Registros Baseados em Tabelas e Cursores em Oracle PL/SQL. Prepare-se para um artigo detalhado, repleto de exemplos práticos e insights valiosos! Para executar os exemplos desse artigo, certifique-se de criar os objetos conforme mostrado nesse artigo aqui.

Introdução aos Registros

Antes de entrarmos nos tipos específicos, vamos entender o que são registros em PL/SQL. Um registro é uma estrutura de dados que se assemelha a uma linha de uma tabela de banco de dados. Cada item de dado é armazenado em um campo com seu próprio nome e tipo de dado.

Imagine que você está organizando informações sobre empresas. Cada empresa tem um nome, endereço e número de funcionários. Um registro contendo um campo para cada um desses itens permite que você trate uma empresa como uma unidade lógica, facilitando a organização e representação das informações da empresa.

A estrutura de um registro é semelhante a esta:

Esta estrutura nos permite tratar os dados da empresa como uma única unidade lógica, tornando mais fácil organizar e representar as informações.

Registros Baseados em Tabelas

O atributo %ROWTYPE nos permite criar registros baseados em tabelas e cursores. É semelhante ao atributo %TYPE usado para definir variáveis escalares, mas em vez de definir um único campo, ele define uma estrutura completa baseada em uma linha da tabela ou no resultado de um cursor.

Exemplo Detalhado de Registro Baseado em Tabela

Vamos ver um exemplo prático e detalhado:

Neste exemplo:

  • curso_rec tem a mesma estrutura que uma linha na tabela CURSO.
  • Usamos SELECT * para preencher todos os campos do registro de uma só vez.
  • Demonstramos como acessar campos individuais usando a notação de ponto.
  • Incluímos tratamento de exceções para melhor robustez.

Atenção! Limitações dos Registros

É crucial entender que um registro não tem um valor próprio. Isso significa que você não pode realizar certas operações diretamente nos registros. Por exemplo:

Registros Baseados em Tabelas com Cursores Explícitos

Agora, vamos explorar como usar registros baseados em tabelas com cursores explícitos. Isso nos permite processar múltiplas linhas de uma tabela de forma eficiente.

Neste script:

  • O cursor explícito c_curso é declarado para retornar um registro baseado na tabela curso.
  • Usamos um loop para processar cada linha retornada pelo cursor.
  • Demonstramos o uso do atributo %ROWCOUNT para contar as linhas processadas.

Registros Baseados em Cursores

Um registro baseado em cursor tem a mesma estrutura que o cursor explícito no qual é baseado. Isso nos permite trabalhar com um subconjunto específico de colunas ou com resultados de consultas complexas.

Exemplo Detalhado de Registro Baseado em Cursor

Vamos ver um exemplo prático e detalhado:

Neste exemplo:

  • O cursor c_tipo_nota seleciona um subconjunto de colunas e aplica filtros e ordenação.
  • Demonstramos o uso de um registro baseado em cursor para processar os resultados.
  • Incluímos cálculos adicionais (soma dos pesos) para mostrar como manipular os dados.
  • Utilizamos os atributos %FOUND e %ROWCOUNT do cursor para fornecer informações adicionais.

Importante! Ordem de Declaração

É crucial lembrar que a declaração de um registro baseado em cursor deve ser precedida pela declaração do cursor. Veja um exemplo de erro comum:

Este exemplo produzirá um erro de compilação, pois o registro é declarado antes do cursor.

Dicas Avançadas e Melhores Práticas

  1. Use registros baseados em tabelas quando precisar trabalhar com todas ou a maioria das colunas de uma tabela.
  2. Opte por registros baseados em cursores quando precisar de um subconjunto específico de colunas ou estiver trabalhando com junções complexas.
  3. Ao trabalhar com grandes conjuntos de dados, considere o uso de BULK COLLECT com registros para melhorar o desempenho:

Utilize FOR loops com cursores para simplificar o código e evitar erros comuns de gerenciamento de cursores:

Ao trabalhar com registros em procedimentos ou funções, considere usar parâmetros do tipo IN OUT para modificar os dados do registro:

Conclusão

Ufa! Chegamos ao fim desta jornada detalhada pelos registros baseados em tabelas e cursores em PL/SQL. Vimos que esses registros são ferramentas poderosas que nos permitem trabalhar com dados de forma estruturada e eficiente.

Pontos-chave para lembrar:

  1. Registros baseados em tabelas usam %ROWTYPE de uma tabela e são ideais para trabalhar com estruturas de tabelas completas.
  2. Registros baseados em cursores usam %ROWTYPE de um cursor e são perfeitos para trabalhar com subconjuntos de dados ou consultas complexas.
  3. Registros não têm valor próprio, mas seus campos individuais têm. Isso afeta como podemos manipulá-los e compará-los.
  4. A ordem de declaração é crucial: sempre declare o cursor antes de declarar um registro baseado nele.
  5. Utilize as melhores práticas, como BULK COLLECT e FOR loops com cursores, para otimizar seu código PL/SQL.

Na próxima aula, exploraremos técnicas avançadas de manipulação de dados usando registros e cursores, incluindo o uso de coleções e tipos de objetos em PL/SQL.

Scroll to Top