Double quotes in Oracle database table names: importance analysis
A piece of NHibernate code attempts to execute the following query:
<code class="language-sql">SELECT * FROM "site" WHERE site_id = 3;</code>
The result is an error "Table or view does not exist". However, the following query works fine:
<code class="language-sql">SELECT * FROM site WHERE site_id = 3;</code>
This difference results from Oracle's distinction between case sensitivity of identifiers.
Case sensitivity of Oracle identifiers
By default, Oracle treats identifiers in a case-insensitive manner, meaning "site" and "Site" refer to the same table. However, if you enclose an identifier in double quotes (" ") in a query, Oracle treats it as case-sensitive.
Impact on query
If a table is created without double quotes, Oracle will store its name in uppercase. Therefore, queries such as "SELECT * FROM my_table" will work regardless of case.
However, if you enclose the table name in double quotes when creating the table ("CREATE TABLE "my_table""), Oracle will preserve its exact case. In this case, the query must use correct case when referencing the table, such as "SELECT * FROM "my_table"".
The role of NHibernate
In NHibernate, you can specify table names with or without double quotes. If you omit the double quotes, NHibernate automatically assumes case-insensitive comparisons. However, NHibernate generates case-sensitive SQL queries if double quotes are present in the mapping.
Practical Application
Understanding the impact of double quotes on table names is critical to query performance. Consistent use of double quotes for case-sensitive tables ensures that Oracle quickly finds the correct table without unnecessary conversions. Otherwise, errors or performance issues may result.
The above is the detailed content of Why Do Quotation Marks Around Oracle Table Names Affect Query Execution?. For more information, please follow other related articles on the PHP Chinese website!