Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle SELECT - Aspas duplas ou sem aspas duplas?


As respostas e links sobre maiúsculas e minúsculas estão corretos, mas sua situação vai um pouco além de um simples problema de maiúsculas e minúsculas, tanto porque o nome da sua coluna começou com um sublinhado quanto porque seu cliente aparentemente está ocultando a citação de você.

Se você tentou criar uma tabela com uma coluna chamada _id , sem citá-lo, você obteria um erro 'ORA-00911:caractere inválido', cujo texto de causa diz 'identificadores não podem começar com nenhum caractere ASCII diferente de letras e números'; o que também está errado, pois também não pode começar com um número (por exemplo, 0_id dá 'ORA-00904::identificador inválido'). Isso é respaldado pelas regras de nomenclatura de objetos de banco de dados :

Portanto, parece que o Aqua Data Studio está seguindo uma convenção de colocar a versão em maiúsculas do nome do objeto que você fornece entre aspas duplas, uma prática mencionada em uma das postagens vinculadas.

Pelo que você mostrou, select _id from ... é passado para o Oracle como select "_ID" from ... , o que é bom se o nome da coluna foi criado como "_ID" . Parece que é o caso de table1 , mas table2 foi criado como "_id" - para que a incompatibilidade de maiúsculas e minúsculas gere o ORA-00904 legítimo que você está vendo.

Seu cliente não está modificando um nome de coluna que já está entre aspas duplas, então select "_id" from ... é passado para o Oracle como está e funciona bem para table2 (mas, inversamente, falharia para table1 ).

O Oracle exige que o nome seja colocado entre aspas duplas se não seguir as regras para identificadores sem aspas e se tiver sido criado como entre aspas - a menos que o valor entre aspas original fosse válido de qualquer maneira, ou seja, segue as regras sem aspas e foi inserido em maiúsculas. Como o nome da coluna começa com um sublinhado, no que diz respeito ao Oracle, todas as referências a ele devem ser colocadas entre aspas duplas, independentemente do caso. Seu cliente está apenas fazendo isso em segundo plano, se você não o citou.

Seguir o conselho que outros deram para evitar identificadores entre aspas e sempre usar nomes válidos sem aspas evitaria problemas como esse.