添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

说实话,笔者当初第一次接触 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