Pular para o conteúdo principal

Questão de Banco de Dados — PL/SQL e Outras Extensões SQL — FCC 2024

Banco de DadosPL/SQL e Outras Extensões SQL
Código
fc147221
Banca
FCC
Órgão
TRT 20
Ano
2024
Cargo
TJ TRT20
Considere o seguinte código PL/SQL:   DECLARE v_num NUMBER := 10; BEGIN  LOOP    DBMS OUT.PUT_LINEP(vU nTum) ;   v_num:= v_num- 1;   EXIT WHEN v_num<5,   END LOOP; END; /   Sua execução imprimirá
  1. A6 linhas numeradas de 1 a 6.
  2. B5 linhas numeradas de 5 a 9.
  3. C5 linhas numeradas de 1 a 5.
  4. D6 linhas numeradas de 10 a 5.
  5. E10 linhas numeradas 0 as 9.
Revelar gabarito e comentário

GabaritoD — 6 linhas numeradas de 10 a 5.

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

PL/SQL: Estruturas de Repetição e o Comando LOOP

Gabarito: letra D. O código imprime os valores de v_num de 10 até 5, totalizando 6 linhas, porque o EXIT WHEN é avaliado após o DBMS_OUTPUT.PUT_LINE e o decremento, e a condição v_num < 5 só é verdadeira quando v_num chega a 4, encerrando o loop antes de imprimir esse valor. A lógica do LOOP básico do PL/SQL, com a ordem das instruções dentro do bloco, é o que determina o resultado.

O PL/SQL (Procedural Language/Structured Query Language) é a extensão procedural da linguagem SQL para o banco de dados Oracle. Ele permite combinar comandos SQL com estruturas de controle de fluxo, como condicionais (IF, CASE) e loops (LOOP, WHILE, FOR). A unidade básica de um programa PL/SQL é o bloco, que possui a estrutura DECLARE (declaração de variáveis), BEGIN (seção executável) e EXCEPTION (tratamento de erros), finalizado com END.

O comando LOOP básico é a forma mais simples de repetição. Ele executa um bloco de instruções indefinidamente até que um comando EXIT ou EXIT WHEN seja encontrado. A sintaxe é:

LOOP
   -- sequência de declarações;
   EXIT WHEN condição;
END LOOP;

A pegadinha desta questão está na ordem das instruções dentro do loop. O código apresentado faz o seguinte:

  1. Declara a variável v_num com valor inicial 10.

  2. Entra no LOOP.

  3. Imprime o valor atual de v_num (primeira iteração: 10).

  4. Decrementa v_num em 1 (primeira iteração: vira 9).

  5. Verifica a condição EXIT WHEN v_num < 5 (primeira iteração: 9 < 5? Não, continua).

  6. Repete os passos 3 a 5 até que a condição seja verdadeira.

Vamos simular a execução passo a passo:

Iteração

Valor impresso

Valor após decremento

Condição v_num < 5?

Ação

10

9

9 < 5? Não

Continua o loop

9

8

8 < 5? Não

Continua o loop

8

7

7 < 5? Não

Continua o loop

7

6

6 < 5? Não

Continua o loop

6

5

5 < 5? Não

Continua o loop

5

4

4 < 5? Sim

Sai do loop

Portanto, os valores impressos são 10, 9, 8, 7, 6 e 5, totalizando 6 linhas. O valor 4 não é impresso porque a condição de saída é verificada depois do comando de impressão e do decremento. Se a ordem fosse EXIT WHEN antes do PUT_LINE, o resultado seria diferente.

Agora, vamos analisar cada alternativa:

  1. 1Imprime v_num
  2. 2Decrementa v_num
  3. 3Testa EXIT WHEN
  4. 4Repete ou sai
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que serão impressas 6 linhas numeradas de 1 a 6. O erro está na sequência dos números. O loop começa com v_num = 10 e decrementa, então os números impressos são decrescentes (10, 9, 8, 7, 6, 5), não crescentes de 1 a 6. A alternativa confunde a quantidade de iterações (6) com os valores impressos.

Alternativa B — ❌ Incorreta

Afirma que serão impressas 5 linhas numeradas de 5 a 9. O erro está na quantidade de linhas. O loop executa 6 iterações, imprimindo os valores de 10 a 5. A alternativa erra tanto na contagem (5 linhas) quanto no intervalo (5 a 9), que não corresponde à execução do código.

Alternativa C — ❌ Incorreta

Afirma que serão impressas 5 linhas numeradas de 1 a 5. O erro está na quantidade e na sequência. O loop executa 6 iterações, imprimindo valores decrescentes de 10 a 5. A alternativa erra na contagem (5 linhas) e na sequência (1 a 5), que não corresponde à execução do código.

Alternativa D — ✅ Correta ⟵ GABARITO

Afirma que serão impressas 6 linhas numeradas de 10 a 5. Esta é a alternativa correta. A simulação da execução mostra que o loop imprime os valores 10, 9, 8, 7, 6 e 5, totalizando 6 linhas, exatamente como descrito. A condição EXIT WHEN v_num < 5 é verificada após a impressão e o decremento, garantindo que o valor 5 seja impresso antes da saída.

Alternativa E — ❌ Incorreta

Afirma que serão impressas 10 linhas numeradas de 0 a 9. O erro está na quantidade e na sequência. O loop não começa em 0 nem imprime 10 linhas. Ele começa em 10 e imprime apenas 6 valores (10 a 5). A alternativa confunde o valor inicial da variável com a quantidade de iterações e inverte a ordem dos números.

Gabarito: letra D

Link permanente: /questoes/fc147221