¿Qué exactamente hacen las comillas alrededor del nombre de la tabla?

Pensé que la comilla (“) era simplemente un tipo de marcador de agrupación, pero estoy depurando algún código de NHibernate y noto que, aunque

SELECT * FROM site WHERE site_id = 3; 

Funciona bien

 SELECT * FROM "site" WHERE site_id = 3; 

falla con una tabla o vista no existe error.

¿Lo que da?

Al poner comillas dobles alrededor de un identificador en Oracle, Oracle trata el identificador como sensible a mayúsculas y minúsculas en lugar de utilizar el valor predeterminado de insensibilidad a mayúsculas y minúsculas. Si crea una tabla (o una columna) con comillas dobles alrededor del nombre, siempre debe referirse al identificador con comillas dobles y especificando correctamente el caso (con la excepción de todos los identificadores en mayúscula, donde las comillas dobles no tienen sentido )

Debajo de las coberturas, Oracle siempre está haciendo una coincidencia de identificador sensible a mayúsculas y minúsculas. Pero siempre arroja identificadores que no están doblemente citados a mayúsculas antes de hacer la coincidencia. Si coloca comillas dobles alrededor de un identificador, Oracle se salta la conversión a mayúsculas.

Entonces, si haces algo como

 CREATE TABLE my_table( col1 number, col2 number ) 

usted puede

 SELECT * FROM my_table SELECT * FROM MY_TABLE SELECT * FROM My_Table SELECT * FROM "MY_TABLE" 

pero algo así como

 SELECT * FROM "my_table" 

fallará.

Por otro lado, si haces algo como

 CREATE TABLE "my_other_table"( col1 number, col2 number ) 

tú no puedes hacer

 SELECT * FROM my_other_table SELECT * FROM MY_OTHER_TABLE SELECT * FROM My_Other_Table SELECT * FROM "MY_OTHER_TABLE" 

pero esto

 SELECT * FROM "my_other_table" 

trabajará

Se debe agregar que los identificadores entre comillas pueden contener caracteres especiales, por ejemplo, “ab cd” es un identificador válido.