Pular para o conteúdo principal

Questão de Banco de Dados — Oracle — FCC 2018

Banco de DadosOracle
Código
fc049133
Banca
FCC
Órgão
SEFAZ-SC
Ano
2018
Cargo
Auditor-Fiscal da Receita Estadual - Tecnologia da Informação (Prova 3)
A troca de contexto é a ocorrência de chaveamento entre a engine SQL e a engine PL/SQL durante a execução de queries ou blocos PL/SQL. Essa troca é invocada sempre que, dentro de um bloco PL/SQL, executa-se uma query ou um comando DML. Se executados isoladamente, os comandos INSERT, DELETE ou UPDATE, por exemplo, costumam ter pouco ou mesmo nenhum impacto na performance, mas quando executados em loops, o efeito das trocas de contexto se torna cumulativo e o prejuízo na performance do procedimento se torna bem evidente.Para evitar esse prejuízo, o Oracle 11g implementa um comando cujo objetivo é enviar ao servidor um lote de comandos DML de uma única vez, utilizando apenas uma troca de contexto. Trata-se do
  1. AFORNEXT.
  2. BFETCH FIRST.
  3. CFORALL.
  4. DMAXLOOP.
  5. ELOOPALL.
Revelar gabarito e comentário

GabaritoC — FORALL.

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”.

Oracle PL/SQL – Comando FORALL e troca de contexto

Gabarito: letra C. No Oracle 11g, o comando FORALL permite enviar um lote de comandos DML (INSERT, UPDATE, DELETE) de uma única vez, reduzindo drasticamente as trocas de contexto entre a engine SQL e a engine PL/SQL. É uma construção exclusiva da linguagem PL/SQL do Oracle, voltada para operações em lote (bulk DML).

A questão descreve exatamente o problema da troca de contexto em loops e aponta que o Oracle implementou um comando para enviar vários DMLs em uma única troca. Esse comando é o FORALL.

  1. 1Engine PL/SQL executa loop
  2. 2Múltiplas trocas de contextoProblema
  3. 3FORALL (bulk DML)Solução
  4. 4Única troca de contexto
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

FORNEXT não é um comando Oracle. Pode haver confusão com o laço FOR...NEXT de outras linguagens, mas no Oracle PL/SQL não existe tal comando para DML em lote.

Alternativa B — ❌ Incorreta

FETCH FIRST é uma cláusula usada em consultas SQL (SELECT ... FETCH FIRST ... ROWS ONLY) para limitar o número de linhas retornadas. Não se aplica a envio em lote de DML.

Alternativa C — ✅ Correta ⟵ GABARITO

FORALL é o comando correto. Sua sintaxe típica é:

FORALL i IN 1..v_array.COUNT
   INSERT INTO tabela VALUES v_array(i);

Dessa forma, todas as inserções são enviadas em uma única troca de contexto, melhorando a performance.

Alternativa D — ❌ Incorreta

MAXLOOP não é um comando reconhecido no Oracle. Pode ser confundido com parâmetros de configuração, mas não existe como comando SQL ou PL/SQL.

Alternativa E — ❌ Incorreta

LOOPALL também não é um comando Oracle. O termo não faz parte da sintaxe da linguagem.

PEGA ESSA DICA!

Memorize que FORALL (com dois L's) é o comando para bulk DML no Oracle, enquanto BULK COLLECT é usado para consultas em lote. Ambos fazem parte do pacote DBMS_SQL implícito e são essenciais para performance em PL/SQL.

Gabarito: letra C (FORALL).

Link permanente: /questoes/fc049133