GabaritoD — index-by tables, nested tables e varrays.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Tipos de Collection em PL/SQL
Gabarito: letra D. Os três tipos de collection disponibilizados pela linguagem PL/SQL do Oracle são as index-by tables (também chamadas de associative arrays), as nested tables e os varrays — essa é a classificação oficial da documentação Oracle, e é exatamente o que a alternativa D enumera. As demais opções misturam conceitos de outras naturezas (tipos de dados escalares, subprogramas, objetos de banco), que não são collections.
As collections em PL/SQL são estruturas de dados que permitem armazenar um conjunto de elementos do mesmo tipo, funcionando como uma "lista" ou "array" dentro da linguagem procedural. Elas são fundamentais para manipular múltiplos valores em memória sem precisar criar tabelas temporárias ou usar múltiplas variáveis. A Oracle define três tipos principais, cada um com características próprias de armazenamento, indexação e flexibilidade.
O primeiro tipo, a index-by table (ou associative array), é uma coleção cujos elementos são acessados por um índice que pode ser um número inteiro ou uma string. Ela é armazenada apenas na memória do servidor e não pode ser persistida diretamente como coluna de tabela — é usada principalmente para processamento temporário dentro de blocos PL/SQL. O segundo tipo, a nested table, é uma coleção que pode ser armazenada em uma coluna de tabela do banco de dados, permitindo que um registro contenha uma lista de valores. Ela é ilimitada em número de elementos e pode ser indexada por inteiros. O terceiro tipo, o varray (abreviação de variable-size array), também pode ser armazenado em colunas, mas tem um tamanho máximo fixo definido na declaração — é útil quando se sabe de antemão o número máximo de elementos.
A distinção prática entre eles é o que a banca explora: enquanto a index-by table é volátil (só em memória), nested tables e varrays podem ser persistidos no banco. Além disso, nested tables são ilimitadas e varrays têm limite fixo. Essa diferença de comportamento é o critério que separa as alternativas corretas das incorretas.
A pegadinha desta questão está em confundir collections com outros elementos da linguagem PL/SQL, como tipos de dados escalares (varchar2), subprogramas (procedures, functions), objetos de banco (packages, object types) ou conceitos de SQL (transactions, cursors). A banca mistura categorias diferentes para testar se o candidato conhece a nomenclatura específica das collections.
NÃO CAIA NESSA!
A banca mistura categorias diferentes da linguagem PL/SQL para confundir. A alternativa C, por exemplo, lista cursor, packages e object types — todos são elementos válidos do PL/SQL, mas nenhum deles é uma collection. O candidato que conhece superficialmente a linguagem pode marcar essa opção por reconhecer termos familiares, sem perceber que a pergunta é especificamente sobre tipos de collection. A alternativa A também é traiçoeira: records são tipos compostos, mas não são collections — são estruturas que agrupam campos de tipos diferentes, enquanto collections agrupam elementos do mesmo tipo.
Tipo de Collection
Indexação
Armazenamento
Limite de Elementos
Index-by Table (Associative Array)
Número inteiro ou string
Somente em memória (não persistível)
Ilimitado
Nested Table
Número inteiro
Pode ser persistida em coluna de tabela
Ilimitado
Varray
Número inteiro
Pode ser persistida em coluna de tabela
Tamanho máximo fixo definido na declaração
Collections em PL/SQL: Index-by table (associative array) (Índice numérico ou string, Só em memória (volátil)); Nested table (Persistível em coluna, Ilimitada); Varray (Persistível em coluna, Tamanho máximo fixo)
Alternativa A — ❌ Incorreta
varchar2 é um tipo de dado escalar (string de caracteres de tamanho variável), e records são tipos compostos que agrupam campos de tipos potencialmente diferentes (como uma "linha" de tabela). Nenhum dos dois é uma collection: collections agrupam elementos do mesmo tipo, enquanto records agrupam campos de tipos distintos. A confusão aqui é entre "tipo composto" (record) e "coleção" (collection) — conceitos vizinhos, mas distintos.
Alternativa B — ❌ Incorreta
Procedures e functions são subprogramas (unidades de código executável), não estruturas de dados. Elas encapsulam lógica e podem ser chamadas dentro de blocos PL/SQL, mas não armazenam coleções de elementos. A alternativa confunde "elementos da linguagem" com "tipos de collection".
Alternativa C — ❌ Incorreta
Cursor é um ponteiro para uma área de memória que armazena o resultado de uma consulta SQL; packages são agrupamentos lógicos de subprogramas, variáveis e tipos; object types são tipos definidos pelo usuário para modelar objetos. Nenhum desses é uma collection. A alternativa reúne elementos válidos do PL/SQL, mas de categorias completamente diferentes — é o distrator mais perigoso, pois todos os termos são familiares.
Alternativa D — ✅ Correta ⟵ GABARITO
A alternativa lista exatamente os três tipos de collection definidos pela Oracle: index-by tables (associative arrays), nested tables e varrays. Essa é a classificação oficial da documentação PL/SQL, e é a única alternativa que responde corretamente à pergunta sobre tipos de collection.
Alternativa E — ❌ Incorreta
Transactions são unidades lógicas de trabalho (conjunto de operações que devem ser executadas atomicamente); subprograms são procedures e functions; nested controls não é um termo técnico da linguagem; bulks refere-se a operações em lote (BULK COLLECT, FORALL), que são técnicas de otimização, não tipos de collection. A alternativa mistura conceitos de transação, programação e otimização sem nenhuma relação com collections.
Gabarito: letra D — as collections em PL/SQL são index-by tables, nested tables e varrays.