Questão nº 44

Questão de Tecnologia da Informação · FGV TJ-MS 2024 (nº 44)

FGV2024Técnico de Nível Superior - Analista de Banco de DadosTecnologia da Informação
Gabarito: Bver comentário ↓

João, administrador de Banco de Dados experiente, percebeu que muitas consultas geradas por relatórios precisam fazer filtros pelo campo "LAST_NAME". No entanto, notou um desempenho insatisfatório devido à ausência de índices nesse campo, resultando em operações de FULL TABLE SCAN e impactando negativamente o tempo de resposta das consultas. Para resolver esse problema, ele decide identificar todas as tabelas com ausências de índices na coluna "LAST_NAME" do banco de dados, independentemente do proprietário.
Para isso, João deverá executar o script:

FROM DBA_IND_COLUMNS
WHERE COLUMN_NAME = 'LAST_NAME';
FROM DBA_TAB_COLUMNS C
LEFT JOIN DBA_IND_COLUMNS I ON I.TABLE_OWNER = C.OWNER AND I.TABLE_NAME = C.TABLE_NAME AND I.COLUMN_NAME = C.COLUMN_NAME
WHERE C.COLUMN_NAME = 'LAST_NAME' AND I.INDEX_NAME IS NULL;
FROM USER_TAB_COLUMNS C
LEFT JOIN USER_IND_COLUMNS I ON I.TABLE_NAME = C.TABLE_NAME AND I.COLUMN_NAME = C.COLUMN_NAME
WHERE C.COLUMN_NAME = 'LAST_NAME' AND I.INDEX_NAME IS NULL;
FROM ORA_COLUMNS C
LEFT JOIN ORA_IND_COLUMNS I ON I.TABLE_OWNER = C.OWNER AND I.TABLE_NAME = C.TABLE_NAME AND I.COLUMN_NAME = C.COLUMN_NAME
WHERE C.COLUMN_NAME = 'LAST_NAME' AND I.INDEX_NAME IS NULL;
FROM DBA_TAB_COLUMNS C
LEFT JOIN DBA_IND_COLUMNS I ON I.TABLE_OWNER = C.OWNER AND I.TABLE_NAME = C.TABLE_NAME AND I.COLUMN_NAME = C.COLUMN_NAME
WHERE C.COLUMN_NAME = 'LAST_NAME' AND I.INDEX_NAME IS NOT NULL;

Resposta comentada

Gabarito Alternativa B

O dicionário de dados do Oracle é um conjunto de tabelas e visões que armazenam informações sobre a estrutura do banco de dados. Para consultar objetos de todos os usuários (schemas), usamos visões que começam com DBA_, enquanto para objetos do usuário atual, usamos USER_.

A query completa que João deve executar é a combinação do segundo bloco FROM/WHERE com a alternativa B. O script correto é:

SELECT C.OWNER, C.TABLE_NAME
FROM DBA_TAB_COLUMNS C
LEFT JOIN DBA_IND_COLUMNS I ON I.TABLE_OWNER = C.OWNER AND I.TABLE_NAME = C.TABLE_NAME AND I.COLUMN_NAME = C.COLUMN_NAME
WHERE C.COLUMN_NAME = 'LAST_NAME' AND I.INDEX_NAME IS NULL;
  • (A) Incorreta: A cláusula SELECT * retornaria todas as colunas das visões DBA_TAB_COLUMNS e DBA_IND_COLUMNS, o que é excessivo e não foca na identificação clara das tabelas.
  • (B) Correta: Esta opção, combinada com o segundo bloco FROM/WHERE fornecido na questão, seleciona o proprietário (C.OWNER) e o nome da tabela (C.TABLE_NAME) para cada coluna 'LAST_NAME' que não possui um índice, atendendo exatamente ao requisito de identificar as tabelas problemáticas.
  • (C) Incorreta: A cláusula SELECT C.TABLE_NAME não incluiria o proprietário da tabela. Em um banco de dados Oracle, diferentes usuários (schemas) podem ter tabelas com o mesmo nome, e é crucial identificar o proprietário para localizar a tabela corretamente.
  • (D) Incorreta: Embora a cláusula SELECT C.OWNER, C.TABLE_NAME esteja correta em si, esta alternativa não é o gabarito oficial. A questão apresenta múltiplas alternativas idênticas para a cláusula SELECT, mas o gabarito aponta especificamente para a letra B.
  • (E) Incorreta: Similarmente à alternativa D, esta opção é idêntica à B, mas não é a designada como gabarito oficial.

Armadilha da banca (para o distrator mais tentador no FROM/WHERE):
A armadilha mais comum para o bloco FROM/WHERE seria escolher a opção que usa FROM USER_TAB_COLUMNS C LEFT JOIN USER_IND_COLUMNS I.... Essa opção é tentadora porque parece correta na estrutura, mas o problema pede para identificar tabelas "independentemente do proprietário", o que exige o uso das visões DBA_ (como DBA_TAB_COLUMNS e DBA_IND_COLUMNS) que mostram objetos de todos os usuários, e não apenas do usuário atual (USER_).

Fonte: FGV TJ-MS 2024 Técnico de Nível Superior - Analista de Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho