Pular para o conteúdo principal

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

Banco de DadosOracle
Código
fc058922
Banca
FCC
Órgão
AL-AP
Ano
2020
Cargo
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
  1. AFOR i:=0 TO vSal.length STEP 1BEGINvAst:= vAst + ' * ' ;END FOR;
  2. BFOR i IN 1.. vSalLOOPvAst:= vAst | | ' * ' ;END LOOP;
  3. CVAR i:=1WHILE(i <= vSal.lenght)BEGINvAst:= vAst | | ' * ' ;i ++ ;END WHILE;
  4. DFOR i:=0 TO vSal.lenght STEP 1LOOPvAst:= vAst + ' * ' ;END LOOP;
  5. 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.

Gabarito: letra B

Link permanente: /questoes/fc058922