Questão de Banco de Dados — Oracle — FCC 2018
- Código
- fc049133
- Banca
- FCC
- Órgão
- SEFAZ-SC
- Ano
- 2018
- Cargo
- Auditor-Fiscal da Receita Estadual - Tecnologia da Informação (Prova 3)
- AFORNEXT.
- BFETCH FIRST.
- CFORALL.
- DMAXLOOP.
- ELOOPALL.
GabaritoC — FORALL.
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.
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.
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.
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.
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.
LOOPALL também não é um comando Oracle. O termo não faz parte da sintaxe da linguagem.
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