如何在 Oracle 数据库中小写对象?

How to lower case objects in Oracle database?

有什么方法可以用小写字母命名我的 Tables,Columns in the Oracle DB?

我搜索了很多,一些建议说我应该像这样在创作中使用双引号:

CREATE TABLE "test" (a number); 

这里的问题是:

它迫使我通过查询 !

double quotes 装饰我所有的表

如果我写:

SELECT * FROM test ;  

我会收到语法错误。

我想将我所有的表、字段命名为小写,因为我将通过使用 (Pluralization and Singularization) 功能的 ORM (Entity Framework) 在我的模型中使用它,所以如果我有这样的 Table :

CITY 根据 Oracle 约定 .

等同于 CITY 实体,导航 属性 的复数形式为 CITies !!

[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 

(注意 table 名称是大写的)。

如果您使用双引号,那么 oracle 将尊重您在 table 名称中使用大小写:

CREATE TABLE "tEsT" ( column_name NUMBER );

和:

SELECT * FROM USER_TABLES;

输出:

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

(注意:现在有两个 table 分别命名为 TESTtEsT,并且 oracle 尊重第二个的大小写敏感性。

这是一个非常可怕且可以说是不必要的 hack,但我想你 可以 为你未引用的 table 名称创建一个小写(因此被引用)同义词:

create table test (a number);
create synonym "test" for test;

那么所有这些都可以工作:

select * from "TEST";
select * from TEST;
select * from TeSt;
select * from test;
select * from "test";

或者,如果您真的非常想对列名执行相同的操作,您可以使用视图:

-- drop synonym "test";
create view "test" as
select a as "a" from test;

如果视图使用数据字典查找列,您的 ORM 可能会更满意。但它可能仍然不喜欢它。如果是,那么它可以使用带引号的小写名称,而所有其他查询可以使用基本的不带引号的标识符。

虽然在某些时候它似乎仍然会引起混淆。