如何让oracle表名不区分大小写?

时间:2016-04-11 21:05:34

标签: php oracle pdo

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

  

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

'因为Oracle的利益被称为Foo而不是foo。有些想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

[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将尊重你在表名中使用case:

CREATE TABLE "tEsT" ( column_name NUMBER );

SELECT * FROM USER_TABLES;

输出:

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

(注意:现在有两个名为TESTtEsT的表,oracle尊重第二个表的区分大小写 - 使用引号创建的表。)

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