说实话,笔者当初第一次接触
Oracle
的时候,也看着很不爽,可那会也只能无奈,因为没法解决。所以心理一直在想,如果能显示成区分大小写的该多好啊,于是我实现了心中的愿意,如下图所示:
期盼已久的效果终于实现了,特别高兴,所以我要告诉大家实现原理,以期待更多像我一样追求美观的人得到
一种心理安慰。
实现方式:
不再用
PL-SQL
直接建表了,而改用
PD
(
Power Desginer
)的方式建表。因为我发现不管我们是否大小写区分
PL-SQL
都会自动帮我们转换称大写的了。
PD
自动生成的
SQL
如下:
create table "TDepartment" (
FID NVARCHAR2(36) not null,
"FText" NVARCHAR2(50) not null,
"FParentID" NVARCHAR2(36) not null,
"FLevel" NUMBER,
"FAutoCode" NVARCHAR2(100),
"FCode" NVARCHAR2(50),
"FLeaf" NUMBER default 1 not null,
"FRemark" NVARCHAR2(500),
"FDataServerIP" NVARCHAR2(100),
"FDataServerPort" NVARCHAR2(10),
"FMediaServerIP" NVARCHAR2(100),
"FMediaServerPort" NVARCHAR2(10),
"FDataServer" NVARCHAR2(200),
"FMediaServer" NVARCHAR2(200),
constraint PK_TDEPARTMENT primary key (FID)
(字段说明的脚本在这就省略了)
原理分析:
PL
自动生成的创建表的脚本中,表名和字段名都加了双引号。
双引号在
Oracle
中表示区分大小写,
Oracle
是严格区分大小写的,未使用双引号时默认全部大写
。可能很多人都会误认为oracle
是不区分大小写的,原因是我们在写查询语句的时候,大小写无所谓,结果都是一样的,这只是个表面现象,只要你不使用双引号表示区分大小写,
oracle
会默认把你写的脚本全部转换为大写的。从下面可以看出:
因为
Oracle
默认存储为大写形式,所以
PL-SQL
显示的效果也是大写的。
正如上面所讲,如果我们不加双引号,那么
Oracle
会默认把表名和字段名全部转换为大写形式。
最简单的查询语句:
select * from TCamera
会报错,提示:
ORA-00942
:
table or view does not exist
表或试图不存在
在这个时候,我们看提示应该很容易明白了,原因是在
Oracle
中的
user-tables
不存在我们要查询的
TCAMERA[
自动转换称大写的
]
表。
那么正确的语句应该是:
select * from "TCamera"
需要加双引号
这个时候就感觉很不舒服了,那写查询多不方便呀,而且不仅是表名需要使用双引号,如果查询某些特定字段也需要加双引号,那么此时给开发人员将带来诸多的不便。这也就是为什么大家都宁愿选择全部大写的了。明白了吗?
Power Designer
的对应设置:
使用
PD
的人就会有问题了,既然默认
PD
生成的都是带双引号区分大小写的,那怎么把双引号去掉呢,总不能一个一个改吧?呵呵,既然你想到了,那么
Sybase
的团队自然也是想到了,所以通过下面的设置步骤,就能去掉
PD
自动生成脚本的双引号了。
找到菜单
Database—>Edit Current DBMS
会打开
DBMS
属性设置窗口,找到
Script
à
Sql
à
CaseSensitivityUsingQuote
,选择
No
,即大小写不区分。如下图所示:
点击确定后,系统会提示是否保存设置,请点击
"
是
"
。
这个时候我们来对比看一下生成的
SQL
:
设置前,
PD
默认区分大小写,表名和字段都带双引号
,
如下图所示:
这表明,
SQL Server
在表字段内容中,其实也是不区分大小写的。但是
Oracle
就不同,同样的状况,
Oracle
肯定查询不到数据,因为
Oracle
严格区分大小写。不信自己可以去试试。
转自:
飞天心宏
2011-12-21