Usage of mixed case database object names is dangerous

Some versions back, Oracle would not allow to create database object names with mixed cases, even if we tried to create them, we could not. In newer versions of Oracle we can create tables, columns, indexes etc using mixed case or lower case, when the names are put inside double quotes. For example

``` sql Create mixed case Customer table and Index on the table CREATE TABLE “Customer” ( “CustomerID” number(10) … );

CREATE INDEX “IDX_Customer_CustomerID” on “Customer”(“CustomerID”);

<!-- more -->
We created table named "Customer" with a column "CustomerID" and the index is named "IDX_Customer_CustomerID". In the above example we can see that mixed case or lower case is supported and the table, column and index are created in the database. When these names are used, we have to reference them everywhere using the lower case letters.
The following statement would be invalid.

```sql Invalid SQL
SELECT * FROM Customer

While the below statement is valid.

``` sql Valid SQL SELECT * FROM “Customer”

We can even create a table such as "CusTomer" and it would be valid.

```sql Customer table with different case
"CustomerID" number(10)

With the large amount of work involved in matching the case for the name of the database object, every time a DML/DDL statement is used against a database object, the confusion it creates when duplicate database objects are allowed to be created (“Customer” and “CusTomer” are valid names).

We can see that its better to avoid using database objects with mixed case names.