Picture of Roberto Sobrinho
Roberto Sobrinho

11/09/2024

DESC Mostra a Coluna, SELECT Erro ORA-00904? Mistério Resolvido: Entenda Por Que Isso Acontece no Oracle


Recentemente, me deparei com um caso curioso em um suporte. O cliente estava frustrado porque tinha criado uma tabela no Oracle Database e, ao usar o comando DESC, a coluna aparecia normalmente. Mas quando ele tentava fazer um SELECT para consultar os dados dessa coluna, o Oracle retornava um erro de “ORA-00904 – invalid identifier”. Algo que parecia simples estava se transformando em um mistério.


🤔 O Problema:

O cliente havia criado uma tabela com uma coluna chamada Col_do_Misterio. Ele conseguia ver essa coluna usando o comando DESC, mas quando tentava rodar o comando SELECT Col_do_Misterio FROM tabela_exemplo, o erro aparecia:

Comando DESC da Tabela:

DESC tabela_exemplo;

Name                Null?    Type
------------------- -------- ----------------
Col_do_Misterio             VARCHAR2(100)

A coluna Col_do_Misterio claramente existia na tabela.

Tentativa de SELECT (com erro) e com * funciona:

SELECT Col_do_Misterio FROM tabela_exemplo;

ORA-00904: "COL_DO_MISTERIO": invalid identifier


SELECT * from tabela_exemplo;

Col_do_Misterio
--------------------------------------
Entendeno o Mosterio

1 row selected.

🔍 Investigando o Mistério:

Quando analisei mais a fundo, descobri o que estava acontecendo. O cliente havia criado a coluna usando aspas duplas e com letras maiúsculas e minúsculas. No Oracle, quando uma coluna é criada com aspas duplas, o nome da coluna se torna sensível a maiúsculas e minúsculas. Isso significa que, se você tentar referenciar essa coluna sem as aspas ou em um caso incorreto (tudo em maiúsculas ou minúsculas), o Oracle não vai reconhecê-la.

Aqui está o que o cliente fez:

CREATE TABLE tabela_exemplo (
  "Col_do_Misterio" VARCHAR2(100));
  
insert into tabela_exemplo select 'Entendeno o Mosterio' from dual;

commit;

O nome da coluna foi armazenado exatamente como escrito, respeitando maiúscula e minúsculas. Ao tentar rodar o SELECT sem as aspas duplas, o Oracle procurava por uma coluna chamada COL_DO_MISTERIO (em maiúsculas), que obviamente não existia, e por isso o erro acontecia.

💡 A Solução:

Expliquei ao cliente que, ao criar uma coluna com aspas duplas e uma combinação de letras maiúsculas e minúsculas, ele sempre teria que usar aspas duplas para referenciá-la nas consultas, exatamente como foi criada. Para resolver o problema, bastava rodar o SELECT desta forma:

SELECT "Col_do_Misterio" FROM tabela_exemplo;

Col_do_Misterio
--------------------------------------
Entendeno o Mosterio

E pronto! A consulta funcionou perfeitamente, retornando os dados da coluna sem erro.


Este caso mostra como o uso de aspas duplas pode causar confusão ao criar e referenciar colunas no Oracle. Quando uma coluna é criada com aspas duplas e uma combinação específica de maiúsculas e minúsculas, o nome da coluna se torna sensível a caso. Isso significa que você precisa sempre usar o nome da coluna exatamente da forma como ela foi criada, incluindo as aspas duplas, ou acabará recebendo o erro de “identificador inválido”.

Minha recomendação é evitar o uso de aspas duplas ao nomear colunas no Oracle. Isso facilita o trabalho com o banco de dados, elimina a necessidade de sempre lembrar da sensibilidade a maiúsculas e minúsculas, e previne erros como o de identificador inválido.

Se você estiver enfrentando erros de “ORA-00904 – invalid identifier””, verifique se as colunas foram criadas com aspas duplas e uma combinação de maiúsculas e minúsculas. Caso sim, use as aspas nas consultas ou considere recriar a coluna para evitar problemas futuros.


🪳🪲 #20240911 #DBASobrinho #GuinaNãoTinhaDó #BóBó #CaceteDeAgulha #Gravando #ClienteMaluco #PedraNaTerra #TudoErrado #LoucosSemCriterio #AmanhaTatto 🪳🪲


Compartilhe

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print

Pesquisar

Roberto Sobrinho

Sou Roberto Fernandes Sobrinho, também conhecido como Sobrinho DBA , pós graduado em “Architecture and Database Administration”, entusiasta, dedicado e com 20 anos de experiência com Oracle Database e suas diversas distribuições e variações.

Oracle ACE Associate

2025

Specialist

Exadata Database Machine X9M

Professional

Oracle Database Administration

Professional

Oracle Database 19c: RAC, ASM, & Grid Infra Administrator

Professional

Oracle Autonomous Database Cloud

Professional

Oracle Cloud Database Migration and Integration

Professional

Oracle Database PL/SQL Developer

Associate

Oracle Cloud Infrastructure Architect

Associate

Oracle Cloud Infrastructure Foundations

Categorias

Categorias

Tags

DESC Mostra a Coluna, SELECT Erro ORA-00904? Mistério Resolvido: Entenda Por Que Isso Acontece no Oracle