Questão FC369515
Analise o código abaixo descrito em PL/SQL do Oracle. DECLARE s PLS_INTEGER := 0; i PLS_INTEGER := 0; j PLS_INTEGER; BEGIN <<outer_loop>> LOOP i := i + 1; j := 0; <<inner_loop>> LO
Linguagem SQL
FGV · 2024
Analise o código abaixo descrito em PL/SQL do Oracle.
DECLARE
s PLS_INTEGER := 0;
i PLS_INTEGER := 0;
j PLS_INTEGER;
BEGIN
<<outer_loop>>
LOOP
i := i + 1;
j := 0;
<<inner_loop>>
LOOP
j := j + 1;
s := s + i * j;
EXIT inner_loop WHEN (j > 5);
EXIT outer_loop WHEN ((i * j) > 15);
END LOOP inner_loop;
END LOOP outer_loop;
DBMS_OUTPUT.PUT_LINE
(O resultado é: ' || TO_CHAR(s));
END;
/
O conteúdo impresso é
- O resultado é: 24.
- O resultado é: 37.
- O resultado é: 75.
- O resultado é: 166.
Mostrar resposta e comentário
Gabarito
D
Comentário do professor
O bloco itera com um outer_loop que incrementa i e um inner_loop que incrementa j, fazendo s := s + i*j a cada iteração. As saídas são verificadas em sequência: primeiro EXIT inner_loop WHEN (j > 5), depois EXIT outer_loop WHEN ((i*j) > 15). Isso significa que, quando j fica maior que 5, o inner loop é terminado imediatamente e a condição de saída do outer não é avaliada nessa iteração.
Na prática: para cada i = 1,2,3 somam-se todos os produtos i·j com j = 1..6, porque o teste j>5 só ocorre após j=6; assim obtém-se \(21,\,42,\,63\) incrementalmente (s = 21, 63, 126). Em i = 4, ao chegar em j = 4 temos \(i*j = 16 > 15\), então o comando EXIT outer_loop é executado dentro do inner loop, encerrando ambos os loops após adicionar \(4+8+12+16 = 40\).
Logo, o acumulado final é \(126 + 40 = 166\), imprimindo: O resultado é: 166.
Conteúdo do catálogo FC Concursos · Atualizado em