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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用Oracle中的UPPER函数将字符串中的小写字母转换成大写字母,例如: SELECT UPPER('hello world') FROM DUAL; 这将返回结果:'HELLO WORLD' ### 回答2: 要将Oracle中的小写字母转换为大写字母,可以使用Oracle的内置函数UPPER()来实现。UPPER()函数用于将字符串中的小写字母转换为大写字母。 例如,假设我们有一个名为"employees"的,其中有一个名为"first_name"的字段存储的是员工的名字,我们可以使用如下的SQL语句将这些名字转换为大写字母: SELECT UPPER(first_name) FROM employees; 这个SQL语句会将"first_name"字段中的所有小写字母转换为大写字母,并将结果返回。你可以通过添加其他查询条件来进一步过滤和排序结果。 需要注意的是,UPPER()函数只会将小写字母转换为大写字母,其他字符如数字、符号和大写字母本身都不会受到影响。同时,UPPER()函数是不区分大小写的,也就是说,它会将所有字符都转换为大写字母,而不管原始字符串中是否已经是大写字母。 在实际应用中,可以根据具体需求使用UPPER()函数来处理不同的字段,以满足数据转换的要求。 ### 回答3: 在Oracle中,我们可以使用TO_UPPER函数将小写字母转换为大写字母。TO_UPPER函数接受一个字符串作为参数,并返回将该字符串中的所有小写字母转换为大写字母的结果。 例如,如果我们有一个名为"employees"的,其中包含一个名为"first_name"的列,我们可以使用以下语句将该列的所有小写字母转换为大写字母: SELECT TO_UPPER(first_name) FROM employees; 这将返回一个结果集,其中包含"first_name"列中的所有值,并且这些值的小写字母已经转换为大写字母。 如果我们只想转换特定的字符串而不是从中选择列的值,我们可以直接将待转换的字符串作为参数传递给TO_UPPER函数。 例如,我们可以使用以下语句将字符串"hello world"中的所有小写字母转换为大写字母: SELECT TO_UPPER('hello world') FROM dual; 这将返回一个结果集,其中包含"HELLO WORLD"字符串。 无论是转换中的列值还是特定的字符串,TO_UPPER函数都是一个方便的方法来在Oracle中实现小写字母到大写字母的转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值