如何使oracle表名不区分大小写


How to make oracle table names case insensitive?

我有一个这样的查询:$this->db->select("SELECT * FROM foo");现在,如果表名是Foo,并且我在MySQL上执行这个脚本,那么一切都很好(MySQL上的表名甚至是小写字母,所以:foo。如果我在表名为foo的Oracle上执行这个,请购买。我会得到:

SQLSTATE[42S02]:找不到基表或视图:1146表"test_db.foo"不存在

因为Oracle的istance被称为Foo而不是Foo。有什么办法解决这个问题吗?

[TL;DR]最简单的做法是永远不要在对象名称周围使用双引号,只让oracle以默认方式管理区分大小写

默认情况下,Oracle数据库区分大小写;然而,在默认情况下,他们也会将所有内容转换为大写,这样就可以从用户中抽象出区分大小写的内容。

CREATE TABLE tEsT ( column_name NUMBER );

然后:

SELECT COUNT(*) FROM test;
SELECT COUNT(*) FROM Test;
SELECT COUNT(*) FROM TEST;
SELECT COUNT(*) FROM tEsT;

将给出相同的输出和:

SELECT * FROM USER_TABLES;

输出:

TABLE_NAME
----------
TEST 

(请注意,表名是大写的)。

如果你使用双引号,那么oracle将尊重你在表名中使用的大小写:

CREATE TABLE "tEsT" ( column_name NUMBER );

和:

SELECT * FROM USER_TABLES;

输出:

TABLE_NAME
----------
TEST 
tEsT

(注意:现在有两个名为TESTtEsT的表,oracle尊重第二个表的大小写敏感性,即用引号创建的表)。

(另请注意:SELECT * FROM tEsT将从第一个表中选择,该表已转换为大写,但SELECT * FROM "tEsT"需要从第二个表中进行选择,即使除了引号之外的查询是相同的)。