Pular para o conteúdo principal

Questão de Banco de Dados — PL-SQL — FCC 2017

Banco de DadosPL-SQL
Código
fc039513
Banca
FCC
Órgão
TRT - 11ª Região (AM e RR)
Ano
2017
Nível
Médio
Cargo
Técnico Judiciário - Tecnologia da Informação
Considere o seguinte trecho de código PL/SQL com as linhas numeradas à esquerda.1 DECLARE2 nome1 VARCHAR2(10) := 'TRT11R';3 nome2 CHAR(10) := 'TRT11R';4 BEGIN5 IF nome1 = nome2 THEN6 DBMS_OUTPUT.PUT_LINE(nome1 || ' igual a ' || nome2);7 ELSE8 DBMS_OUTPUT.PUT_LINE(nome2 || ' diferente de ' || nome1 );9 END IF;10 END;11 /Ao executar este código no Oracle 11g, em condições ideais,
  1. Aserá impresso TRT11R igual a TRT11R.
  2. Bocorrerá um erro, pois todos os strings deveriam estar delimitados por " " e não por ' '.
  3. Cocorrerá um erro, pois nome1 e nome2 são de tipos diferentes.
  4. Docorrerá um erro, pois o comando de saída deveria ser DBMS_OUTPUT_LINE.
  5. Eserá impresso TRT11R diferente de TRT11R.
Revelar gabarito e comentário

GabaritoE — será impresso TRT11R diferente de TRT11R.

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: Comparação entre VARCHAR2 e CHAR

Gabarito: letra E. A comparação entre uma variável VARCHAR2 e uma variável CHAR no Oracle utiliza semântica non-blank-padded, ou seja, os espaços à direita não são ignorados. Como nome2 (CHAR(10)) é preenchido com espaços até o tamanho declarado, enquanto nome1 (VARCHAR2(10)) contém exatamente a string 'TRT11R', os valores são considerados diferentes, executando o bloco ELSE.

A banca testa o conhecimento sobre os tipos de dados VARCHAR2 (tamanho variável) e CHAR (tamanho fixo com preenchimento de espaços) e como o Oracle realiza a comparação entre eles.

1VARCHAR2
Tamanho variável
Armazena exatamente a string
2CHAR
Tamanho fixo
Preenche com espaços à direita
3Regra de comparação
Semântica non-blank-padded
Espaços NÃO são ignorados
Resultado: diferentes
Comparação VARCHAR2 × CHAR (Oracle)
LEVELsoulevel.com.br
Comparação VARCHAR2 × CHAR (Oracle): VARCHAR2 (Tamanho variável, Armazena exatamente a string); CHAR (Tamanho fixo, Preenche com espaços à direita); Regra de comparação (Semântica non-blank-padded, Espaços NÃO são ignorados, Resultado: diferentes)

Alternativa A — ❌ Incorreta

Afirma que será impresso "TRT11R igual a TRT11R". Isso ocorreria se a comparação fosse de igualdade, mas, devido ao preenchimento de espaços no CHAR, a condição IF nome1 = nome2 é falsa. O Oracle não ignora os espaços ao comparar VARCHAR2 com CHAR, diferentemente do que ocorre em comparações entre dois CHAR.

Alternativa B — ❌ Incorreta

Diz que ocorre um erro por uso de aspas simples. Em PL/SQL, strings são delimitadas por aspas simples ('). Aspas duplas (") são usadas para identificar objetos (tabelas, colunas) com nomes sensíveis a maiúsculas/minúsculas ou que contenham espaços. Portanto, o código está sintaticamente correto.

Alternativa C — ❌ Incorreta

Afirma que ocorre erro por tipos diferentes. Embora VARCHAR2 e CHAR sejam tipos distintos, o Oracle permite a comparação entre eles, convertendo implicitamente um dos valores. Não há erro nessa operação.

Alternativa D — ❌ Incorreta

Alega que o comando de saída correto seria DBMS_OUTPUT_LINE. O comando correto é DBMS_OUTPUT.PUT_LINE (com ponto). A grafia apresentada na questão está correta.

Alternativa E — ✅ Correta ⟵ GABARITO

O código imprime a mensagem do bloco ELSE, que exibe nome2 || ' diferente de ' || nome1. nome2 contém 'TRT11R' seguido de espaços, e nome1 contém apenas 'TRT11R'. A saída será algo como "TRT11R diferente de TRT11R", que corresponde à descrição da alternativa.

Consulta Oracle: A documentação oficial do Oracle esclarece: "When Oracle compares a CHAR value with a VARCHAR2 value, it uses non-blank-padded comparison semantics."

Gabarito: letra E

Link permanente: /questoes/fc039513