sql >> Base de Datos >  >> RDS >> Oracle

Oracle SELECT - ¿Comillas dobles o sin comillas dobles?

Las respuestas y los enlaces sobre el uso de mayúsculas y minúsculas son correctos, pero su situación va un poco más allá de un simple problema de caso, tanto porque el nombre de su columna comenzó con un guión bajo como porque aparentemente su cliente generalmente le oculta las citas.

Si intentaste crear una tabla con una columna llamada _id , sin citarlo, obtendría un error 'ORA-00911:carácter no válido', cuyo texto de causa dice 'los identificadores no pueden comenzar con ningún carácter ASCII que no sean letras y números'; lo cual también es incorrecto ya que tampoco puede comenzar con un número (por ejemplo, 0_id da 'ORA-00904::identificador inválido'). Esto está respaldado por las reglas de nomenclatura de objetos de base de datos :

Por lo tanto, parece que Aqua Data Studio sigue la convención de encerrar la versión en mayúsculas del nombre del objeto que proporciona entre comillas dobles, una práctica mencionada en una de las publicaciones vinculadas.

De lo que has mostrado, select _id from ... se pasa a Oracle como select "_ID" from ... , lo cual está bien si el nombre de la columna se creó como "_ID" . Parece que ese es el caso de table1 , pero table2 fue creado como "_id" - por lo que la discrepancia de mayúsculas y minúsculas genera el ORA-00904 legítimo que está viendo.

Su cliente no está modificando un nombre de columna que ya está entre comillas dobles, así que select "_id" from ... se pasa a Oracle tal cual y funciona bien para table2 (pero, por el contrario, fallaría para table1 ).

Oracle requiere que el nombre esté entre comillas dobles si no sigue las reglas para los identificadores sin comillas y si se creó entre comillas, a menos que el valor original entre comillas fuera válido de todos modos, es decir, sigue las reglas sin comillas y se ingresó en mayúsculas. Dado que el nombre de su columna comienza con un guión bajo, en lo que respecta a Oracle, todas las referencias deben estar entre comillas dobles, independientemente del caso. Su cliente solo está haciendo eso en segundo plano si no lo ha citado usted mismo.

Seguir los consejos que otros han dado para evitar los identificadores entre comillas y usar siempre nombres que sean válidos sin comillas evitaría problemas como este.