刺球网络安全社区

 找回密码
 立即注册

新浪微博登陆

只需一步, 快速开始

QQ登录

只需一步,快速开始

搜索
查看: 1146|回复: 0

如何让Oracle表及字段显示为区分大小写

[复制链接]

 成长值: 215630

新浪微博达人勋

  • TA的每日心情
    慵懒
    2019-4-4 01:41
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    1134

    主题

    1716

    帖子

    37万

    积分

    管理员

    技术指数:★★★★★

    Rank: 9Rank: 9Rank: 9

    积分
    376126

    社区QQ达人最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    QQ
    发表于 2017-10-18 12:27:26 | 显示全部楼层 |阅读模式
    相信大部分用惯了SQL Server的人,刚开始用Oracle肯定会特不习惯,因为通常情况下,Oracle建的表名和字段名都会自动给我们转换为大写的。如下图所示
    084158ddlhlb8o8dzyxmdj.jpg
    说实话,笔者当初第一次接触Oracle的时候,也看着很不爽,可那会也只能无奈,因为没法解决。所以心理一直在想,如果能显示成区分大小写的该多好啊,于是我实现了心中的愿意,如下图所示:
    084158sev0wu9nka0eanli.jpg

    期盼已久的效果终于实现了,特别高兴,所以我要告诉大家实现原理,以期待更多像我一样追求美观的人得到 一种心理安慰。
    实现方式:
    不再用PL-SQL直接建表了,而改用PDPower 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会默认把你写的脚本全部转换为大写的。从下面可以看出:
    084159z76c8hhkhzg7788h.jpg

    因为Oracle默认存储为大写形式,所以PL-SQL显示的效果也是大写的。
    084159y0az79baoom6lzca.jpg

    正是因为区分大小写,所以在Oracle中可以存在大小写并存的同名表或表字段。

    到这里大家我想大家应该明白了,怎么使Oracle区分大小写了,就是使用双引号。
    思考:既然Oracle可以区分大小写,那为什么大家在使用的时候都宁愿选择看着不舒服的大写形式呢?下面这个实验我们将给出答案,如下图所示:
    084159kjnempme2z5m55ec.jpg

    正如上面所讲,如果我们不加双引号,那么Oracle会默认把表名和字段名全部转换为大写形式。
    最简单的查询语句:select * from TCamera   
    会报错,提示:ORA-00942table or view does not exist   表或试图不存在
    在这个时候,我们看提示应该很容易明白了,原因是在Oracle中的user-tables 不存在我们要查询的TCAMERA[自动转换称大写的表。
    那么正确的语句应该是:select * from “TCamera”   需要加双引号
       这个时候就感觉很不舒服了,那写查询多不方便呀,而且不仅是表名需要使用双引号,如果查询某些特定字段也需要加双引号,那么此时给开发人员将带来诸多的不便。这也就是为什么大家都宁愿选择全部大写的了。明白了吗?
    084200wtla4qaztl1aafnr.jpg

    Power Designer的对应设置:
    使用PD的人就会有问题了,既然默认PD生成的都是带双引号区分大小写的,那怎么把双引号去掉呢,总不能一个一个改吧?呵呵,既然你想到了,那么Sybase的团队自然也是想到了,所以通过下面的设置步骤,就能去掉PD自动生成脚本的双引号了。
    找到菜单Database—>Edit Current DBMS  会打开DBMS属性设置窗口,找到ScriptàSqlàCaseSensitivityUsingQuote,选择No,即大小写不区分。如下图所示:
    084201hruz3b4lwhp23h3b.jpg

    点击确定后,系统会提示是否保存设置,请点击“是”。
    这个时候我们来对比看一下生成的SQL

    设置前,PD默认区分大小写,表名和字段都带双引号,如下图所示:

    0842011l5f2t35e25leph3.jpg


    设置后,不区分大小写,所有的都不带双引号,所以生成的表及其字段都将默认被Oracle转换为大写的形式。如下图所示:

    084201xicviipvpfoo3fxo.jpg 到这里,PDOracle就对应起来了,喜欢什么形式的就自己动手去设置吧。
    最后我们对比一下SQL Server Oracle在查询具体内容上的区别,让大家更深刻地认识到我们平时可能存在的误解。
    0842017toxg9j7jb4rgn2r.jpg

    这表明,SQL Server在表字段内容中,其实也是不区分大小写的。但是Oracle就不同,同样的状况,Oracle肯定查询不到数据,因为Oracle严格区分大小写。不信自己可以去试试。



    楼主热帖
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
     
     
    技术支持
    点击这里给我发消息
    在线客服
    点击这里给我发消息
    点击这里给我发消息
    刺球网安群①:
    刺球网安社区交流群①
    在线时间:
    8:30-21:00
     

    刺球网安 渝公网安备 50011402500080号 ( 渝ICP备15001097号-1 )申请友链|小黑屋| 刺球网络安全社区

    GMT, 2019-6-26 17:56 , Processed in 0.287363 second(s), 45 queries , Gzip On.

    Powered by 刺球网安

    © 2014-2025

    快速回复 返回顶部 返回列表