如何在 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 分别命名为 TEST
和 tEsT
,并且 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 可能会更满意。但它可能仍然不喜欢它。如果是,那么它可以使用带引号的小写名称,而所有其他查询可以使用基本的不带引号的标识符。
虽然在某些时候它似乎仍然会引起混淆。
有什么方法可以用小写字母命名我的 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 分别命名为 TEST
和 tEsT
,并且 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 可能会更满意。但它可能仍然不喜欢它。如果是,那么它可以使用带引号的小写名称,而所有其他查询可以使用基本的不带引号的标识符。
虽然在某些时候它似乎仍然会引起混淆。