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