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 🪳🪲