zoukankan      html  css  js  c++  java
  • Oracle之表、字段大写问题

    先写结论:如果在Oracle中的对象是区分大小写的,那么SELECT必须加双引号。

    由于刚使用 ORACLE ,没有想到它有一些奇奇怪怪的特质,并非贬义。也许就像我吃惯了川菜,浙菜虽有其风味,但还是令人我想念家乡的味道。

    用惯SQL Server,刚开始用 ORACLE 肯定不大习惯。SQL Server数据库是不转换为大写,但是使用时并不区分大小写。而 ORACLE 建的表名和字段名会自动为转换为大写。甚至会因为这一点感到有些恼火。因为不知道这一点,但又出了错误,根本无从检查。。。

    我会从 ORACLE 官方的默认配置,以及误区,和个人考虑三个方面来解释这个问题。

    默认配置

    因为 ORACLE 在建表/字段时,如果没有双引号, ORACLE 会把表名、字段名全部转化为大写字母,然后写入数据字典。访问数据字典时,没有双引号 ORACLE 会将其转化成大写然后再去数据字段中查找。不仅仅关键字不区分大小写,函数名,过程名,表名称,pl/sql块中变量名,用户名,密码等都不区分大小写[1]

    误区

    可能很多人都会误认为 ORACLE 是不区分大小写的,原因是我们在写查询语句的时候,大小写无所谓,结果都是一样的,这只是个表面现象。因为只要你不使用双引号表示区分大小写, ORACLE 会默认把你写的脚本全部转换为大写的。

    例如:如果创建表使用如下语句:

    create table "TaBlE_NaMe"(blah..)

    那么必须在SELECT中使用双引号才能返回预期结果。

    如果创建表使用:

    create table TaBlE_NaMe (blah..)

    没有引号的SELECT也应该能返回预期结果[2]

    个人考虑

    我也在想这些,官方推荐的大写是否是因为大小写对SQL执行快慢有影响?

    但有网上大神提到:“任何的语言都需要进行词法和语法分析,经过oracle的词法分析,本身就会将小写转成大写,所以这个无关sql的执行效率问题,只是减少了编译过程的时间而已。”

    但我觉得这条也挺好:“斤斤计较这个没什么必要,即使多执行一条功能相同的语句也是非常快的,关键是处理大数据量的时候的性能优化(这问题很广,网上有很多建议都可以看看),这个比较重要。”

    我认为,就只当是单纯的数据库差异来看比较好。

    [1] http://www.cnblogs.com/kerrycode/archive/2011/05/05/2037151.html ORACLE 对象大小写问题

    [2] https://stackoverflow.com/questions/31569953/why-does-ORACLE -12c-query-require-double-quotes-around-table/31572872#31572872 Whydoes  ORACLE  12c query require double quotes around table[duplicate]

  • 相关阅读:
    数据库中计算值的更新方法
    多语言系统的数据库设计
    深蓝词库转换2.0发布——支持仓颉、注音、五笔、郑码、二笔等
    数据库SQL开发的一些要点
    最近工作有点累
    IPv6地址争夺中国再落后 申请量仅全球1.8%
    Nantpad 1.0 has been released!
    又丢了一辆自行车
    搬到新家了.
    我和我的好友的计算机之路.希望能给你的计算机生活点一盞明灯
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12926005.html
Copyright © 2011-2022 走看看