Questão de Banco de Dados — Oracle — FUNDATEC 2025
- Código
- qg474889
- Banca
- FUNDATEC
- Órgão
- PROCERGS
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista em Computação / Ênfase em Programação de Sistemas na Tecnologia JAVA

- A8
- B08
- C80
- DNULL
- EApresenta erro de sintaxe

GabaritoA — 8
Gabarito: letra A — a conta chega a 8 — alternativa A.
Em bancos de dados Oracle, os tipos de texto CHAR e VARCHAR2 guardam cadeias de caracteres, mas com comportamentos diferentes. CHAR é de comprimento fixo: se você declara CHAR(10) e guarda 'TRT11R', o Oracle completa com espaços à direita até dar 10 caracteres, então fica 'TRT11R '. Já VARCHAR2 é de comprimento variável: guarda exatamente o que você atribuiu, sem espaços extras. Essa diferença de armazenamento é o que muda o resultado de comparações.
Quando o Oracle compara um CHAR com um VARCHAR2, ele usa a regra de comparação com preenchimento de espaços (blank-padded comparison): os espaços à direita do CHAR são ignorados para efeito de igualdade. Assim, 'TRT11R' (VARCHAR2) é considerado igual a 'TRT11R ' (CHAR). Se os dois fossem VARCHAR2, a comparação seria caractere por caractere e os espaços fariam diferença, mas como um é CHAR, a regra especial se aplica.
Esta questão testa exatamente essa regra: você precisa saber que CHAR preenche com espaços e que, na comparação com VARCHAR2, esses espaços são ignorados. A partir daí, a condição IF é verdadeira e a saída é o que está no primeiro ramo.
nome1 VARCHAR2(10) := 'TRT11R'
nome2 CHAR(10) := 'TRT11R'
IF nome1 = nome2 THEN DBMS_OUTPUT.PUT_LINE('8'); ELSE DBMS_OUTPUT.PUT_LINE('80');
O que queremos: a saída do bloco PL/SQL
Antes de comparar, precisamos saber o conteúdo real de cada variável. nome1 é VARCHAR2(10) e recebe 'TRT11R', então guarda exatamente esses 6 caracteres. nome2 é CHAR(10) e recebe o mesmo texto, mas por ser CHAR, o Oracle completa com espaços até 10 caracteres, então guarda 'TRT11R ' (com 4 espaços).
nome1 = 'TRT11R', nome2 = 'TRT11R '
Achar que CHAR guarda só o texto digitado, sem espaços — é justamente o contrário.
Agora que sabemos o conteúdo, vamos avaliar a condição IF nome1 = nome2. Como um é VARCHAR2 e o outro é CHAR, o Oracle aplica a regra de comparação com preenchimento de espaços: ele ignora os espaços à direita do CHAR. Então 'TRT11R' é igual a 'TRT11R '.
Por que esta fórmula: A regra é do Oracle: na comparação entre CHAR e VARCHAR2, os espaços à direita do CHAR são desconsiderados. Isso é diferente de comparar dois VARCHAR2, onde os espaços contam.
condição TRUE
Pensar que os espaços fazem diferença e que a condição é falsa, marcando 80.
Como a condição é verdadeira, o bloco executa o comando do THEN, que imprime '8'. O ELSE não é executado.
Inverter os ramos e imprimir 80 por engano.
Resposta: 8 — alternativa A
Link permanente: /questoes/qg474889