Analista Legislativo - Desenvolvedor de Banco de Dados
Considere o bloco PL/SQL abaixo, em um ambiente Oracle em condições ideais.DECLARE vColNo colaborador.idColaborador%TYPE := 371;vAst colaborador.estrelas%TYPE := NULL;vSal colaborador.salario%TYPE;BEGINSELECT NVL(ROUND(salario/5000), 0) INTO vSalFROM colaborador WHERE idColaborador = vColNo;..I..UPDATE colaborador SET estrelas = vAstWHERE idColaborador = vColNo;COMMIT;END;/Para adicionar um asterisco na coluna estrelas para cada R$5000 do salário do funcionário (se o número for 10.000, existirão 2 asteriscos, por exemplo), a lacuna I acima deve ser preenchida por
EFOR i IN 0.. vSal STEP 1BEGINvAst:= vAst + ' * ' ;END;
Revelar gabarito e comentário▾
GabaritoB — FOR i IN 1.. vSal
LOOP
vAst:= vAst | | ' * ' ;
END LOOP;
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: Estrutura FOR LOOP e Concatenação de Strings
Gabarito: letra B. A lacuna I deve utilizar um laço FOR i IN 1..vSal LOOP que concatena asteriscos à variável vAst usando o operador ||. As demais alternativas possuem erros de sintaxe típicos do PL/SQL (operador de concatenação errado, uso de STEP, WHILE com BEGIN...END inadequado).
O bloco PL/SQL do enunciado calcula vSal como NVL(ROUND(salario/5000), 0). Para cada inteiro de 1 até vSal, deve-se anexar um asterisco à string vAst. A sintaxe correta do laço FOR em PL/SQL é:
PL/SQL (Oracle):FOR i IN 1..vSal LOOP vAst := vAst || ' * ';END LOOP;
A concatenação de strings usa ||, não +. O laço não utiliza STEP nem BEGIN...END – esse último é usado em blocos anônimos, mas o FOR LOOP já contém um bloco implícito.
Alternativa
Sintaxe do Laço
Operador de Concatenação
Atributo de Tamanho
Estrutura de Bloco
Resultado
A
FOR i:=0 TO vSal.length STEP 1
+
vSal.length (inválido)
BEGIN...END FOR;
❌ Incorreta
B
FOR i IN 1..vSal
||
Não usa
LOOP...END LOOP;
✅ Correta
C
WHILE(i <= vSal.lenght)
||
vSal.lenght (inválido)
BEGIN...END WHILE;
❌ Incorreta
D
FOR i:=0 TO vSal.lenght STEP 1
+
vSal.lenght (inválido)
LOOP...END LOOP;
❌ Incorreta
E
FOR i IN 0..vSal STEP 1
+
Não usa
BEGIN...END;
❌ Incorreta
Alternativa A — ❌ Incorreta
FOR i:=0 TO vSal.length STEP 1 e BEGIN ... END FOR;
Em PL/SQL, a sintaxe é FOR i IN 1..vSal LOOP ... END LOOP;. A cláusula STEP não existe.
vSal.length não é um atributo válido para variáveis numéricas; o valor já é inteiro e deve ser usado diretamente.
O final deve ser END LOOP;, não END FOR;.
Alternativa B — ✅ Correta ⟵ GABARITO
FOR i IN 1.. vSal LOOP vAst:= vAst || ' * ' ; END LOOP;
Utiliza a sintaxe padrão do PL/SQL: FOR contador IN [REVERSE] limite_inferior..limite_superior LOOP ... END LOOP;.
O operador de concatenação || é o correto.
Cada iteração adiciona um asterisco à string, produzindo o resultado desejado (ex.: para vSal = 2, vAst torna-se ' * * ').
Alternativa C — ❌ Incorreta
VAR i:=1 WHILE(i <= vSal.lenght) BEGIN vAst:= vAst || ' * ' ; i ++ ; END WHILE;
PL/SQL não aceita VAR i:=1; a declaração de variável usa i NUMBER; ou i INT;.
O comando WHILE exige LOOP ... END LOOP;, e não BEGIN ... END WHILE;.
i++ não é operador válido; deve-se usar i := i + 1;.
vSal.lenght com erro de digitação (lenght vs length) e, como antes, não é atributo.
Alternativa D — ❌ Incorreta
FOR i:=0 TO vSal.lenght STEP 1 LOOP vAst:= vAst + ' * ' ; END LOOP;
STEP 1 é inválido em PL/SQL.
O operador + não concatena strings; usa-se ||.
vSal.lenght é um atributo incorreto (e com erro de ortografia).
Alternativa E — ❌ Incorreta
FOR i IN 0.. vSal STEP 1 BEGIN vAst:= vAst + ' * ' ; END;
STEP 1 novamente inválido.
O laço FOR em PL/SQL usa LOOP ... END LOOP;, não BEGIN ... END; (que é para blocos anônimos).
+ não é operador de concatenação.
Além disso, iniciar de 0 faria uma iteração extra indesejada quando vSal = 0 (se vSal for 0, o loop IN 1..0 não executa, mas 0..0 executaria uma vez, gerando um asterisco a mais).
PEGA ESSA DICA!
No PL/SQL, memorize a estrutura do FOR LOOP: FOR i IN 1..n LOOP ... END LOOP;. O operador de concatenação de strings é sempre ||. Evite tentar usar + para strings, como em outras linguagens. O STEP não existe – para incrementos diferentes de 1, use um loop com WHILE ou FOR ... REVERSE.