Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2796805
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2015-01-13 20:57:49

                    ORACLE栏位标识符大小写

         我们知道oracle的视图或是表中的栏位默认情况下对于大小写是不敏感的,
以前我也是一直这样认为,最后找了半天原因,发现部分系统视图对于大小写
需要注意。

如以下以gv$recover_file为例,select中大小写返回结果一样

DONGDONGSQL>select file# from gv$recover_file;

     FILE#
----------
         6

DONGDONGSQL>select FILE# from gv$recover_file;

     FILE#
----------
         6

看看这个视图结构

DONGDONGSQL>desc  gv$recover_file;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 INST_ID                                            NUMBER
 FILE#                                              NUMBER
 ONLINE                                             VARCHAR2(7)
 ONLINE_STATUS                                      VARCHAR2(7)
 ERROR                                              VARCHAR2(18)
 CHANGE#                                            NUMBER
 TIME                                               DATE
 CON_ID                                             NUMBER

现在我需要看看ONLINE这个字段的内容,神奇的事情发生了.

DONGDONGSQL>select file#,ONLINE from gv$recover_file;
select file#,ONLINE from gv$recover_file
             *
ERROR at line 1:
ORA-00936: missing expression

竟然报错了,如果把OFFLINE改成小写呢

DONGDONGSQL>select file#,online  from gv$recover_file;
select file#,online  from gv$recover_file
             *
ERROR at line 1:
ORA-00936: missing expression

还是报错了,分析可能是由于这个小写的online被当成了保留字。


DONGDONGSQL>select file#,"ONLINE" from gv$recover_file;

     FILE# ONLINE
---------- -------
         6 OFFLINE

使用了双引号,防止oracle转成大写,这样执行才正常.

DONGDONGSQL>create table t2(online varchar2(100));
create table t2(online varchar2(100))

验证发现online这个小写单词果然是系统的保留字.另一点的结论就是当我们在select中表示栏位是
如果不加双引号,还会是转换成小写去执行.


 

阅读(2828) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~