Controles de Iteração de Coleções e Expressões Qualificadas no Oracle PL/SQL

Introdução

O Oracle 21c introduziu melhorias significativas nos controles de iteração de coleções e nas expressões qualificadas. Estas funcionalidades aprimoram a legibilidade do código, permitindo que os desenvolvedores expressem lógicas complexas de forma mais concisa e clara. Este artigo explorará em detalhes estas novas características, fornecendo exemplos práticos e considerações de uso.

Controles de Iteração de Coleções

O Oracle 21c introduziu três novos controles de iteração de coleções: VALUES OF, INDICES OF e PAIRS OF. Cada um destes oferece uma maneira única de interagir com os elementos de uma coleção.

1. VALUES OF

O controle VALUES OF permite iterar diretamente sobre os valores de uma coleção.

Exemplo:

Saída:

2. INDICES OF

O controle INDICES OF permite iterar sobre os índices de uma coleção. Este é particularmente útil quando você precisa acessar ou manipular os índices diretamente.

Exemplo:

Saída:

3. PAIRS OF

O controle PAIRS OF fornece acesso tanto aos valores quanto aos índices de uma coleção, combinando as funcionalidades de VALUES OF e INDICES OF.

Exemplo:

Saída:

Expressões Qualificadas

As expressões qualificadas, introduzidas no Oracle 18c e aprimoradas no 21c, oferecem uma maneira mais concisa de inicializar e manipular coleções.

Sintaxe Básica

Tipos de Expressões Qualificadas

  1. Expressão qualificada vazia: typemark()
  2. Expressão qualificada simples: Produz um único valor
  3. Expressão qualificada agregada: Produz uma lista de valores

Exemplo com Associative Array

Saída:

Expressões Qualificadas Agregadas com Associações de Iterador

Estas são expressões que permitem criar e preencher coleções de forma mais concisa e flexível, usando iteradores para definir os valores e, opcionalmente, os índices.

Associação de Iterador

Saída:

Nesse exemplo:

  • Criamos uma coleção com 4 elementos.
  • O índice i vai de 1 a 4.
  • Cada elemento recebe o valor de i/2.

Esta é a forma mais simples de associação de iterador, onde os índices são implicitamente definidos pela sequência do loop.

Associação de Iterador de Índice

Saída:

Neste exemplo:

  • Iteramos sobre os pares (índice, valor) de v_tab.
  • Para cada par, criamos um novo elemento em v_tab_new.
  • O novo índice é i+10 (índice original + 10).
  • O novo valor é v+10 (valor original + 10).

Resultado:

  • O índice 1 de v_tab (valor 0.5) torna-se índice 11 em v_tab_new (valor 10.5)
  • O índice 2 de v_tab (valor 1) torna-se índice 12 em v_tab_new (valor 11)
  • E assim por diante…

A palavra-chave INDEX permite definir explicitamente os novos índices.

Associação de Iterador de Sequência

Saída:

Neste exemplo:

  • Usamos SEQUENCE para criar uma sequência de 5 elementos (10 a 14).
  • Cada elemento recebe o valor de i/2.
  • Os índices são atribuídos sequencialmente começando de 1, independentemente dos valores de i.

Resultado:

  • índice 1: 10/2 = 5
  • índice 2: 11/2 = 5.5
  • índice 3: 12/2 = 6
  • índice 4: 13/2 = 6.5
  • índice 5: 14/2 = 7

A palavra-chave SEQUENCE é útil quando queremos usar um range de valores para cálculo, mas manter a indexação padrão da coleção.

Considerações sobre Nested Tables

Ao usar expressões qualificadas com Nested Tables, é necessário usar INDEX ou SEQUENCE para evitar erros. Por exemplo:

Ambas as formas produzirão o mesmo resultado para Nested Tables, mas são necessárias para esclarecer como os elementos devem ser inseridos na coleção.

Conclusão

Os novos controles de iteração de coleções (VALUES OF, INDICES OF, PAIRS OF) e as expressões qualificadas aprimoradas no Oracle 21c oferecem maneiras mais eficientes e legíveis de trabalhar com coleções em PL/SQL. Eles permitem um código mais conciso e expressivo, facilitando a manutenção e compreensão de lógicas complexas envolvendo coleções.

Ao utilizar essas funcionalidades, considere:

  1. A escolha entre VALUES OF, INDICES OF e PAIRS OF depende das necessidades específicas de iteração.
  2. Expressões qualificadas podem simplificar a inicialização de coleções, mas é preciso estar atento às diferenças entre tipos de coleções.
  3. O uso de associações de iterador, índice e sequência oferece flexibilidade na manipulação de coleções, mas requer atenção à sintaxe correta para cada tipo de coleção.

Pratique usando esses recursos em diferentes cenários para se familiarizar com suas capacidades e limitações, sempre considerando a clareza e manutenibilidade do código resultante. Essas novas funcionalidades não apenas melhoram a eficiência do código, mas também aumentam significativamente sua legibilidade e manutenibilidade.

Scroll to Top