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,
Aserá impresso TRT11R igual a TRT11R.
Bocorrerá um erro, pois todos os strings deveriam estar delimitados por " " e não por ' '.
Cocorrerá um erro, pois nome1 e nome2 são de tipos diferentes.
Docorrerá um erro, pois o comando de saída deveria ser DBMS_OUTPUT_LINE.
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.
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."