ORACLE栏位标识符大小写

2870阅读 0评论2015-01-13 oracle狂热分子
分类:Oracle

                    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中表示栏位是
如果不加双引号,还会是转换成小写去执行.


 

上一篇:MySQL线程池(THREAD POOL)的处理
下一篇:MySQL的数据读取过程