该文章曾发表于新浪博客【http://blog.sina.com.cn/s/blog_9e1c7dc50102vwrv.html】,今天(2018-06-12)翻看之前的文档(有些博客我是整理成TXT保存起来的),重读了本篇博客,又是不由会心一笑,所以就拿过来,放到自己的博客系统里。如下即是正文。
首先创建表
create table sample(
id number(10) ,
title varchar2(20),
createUser varchar2(20)
);
用plsql查看生成的表,字段全为大写了,重点看下createUser,无论创建语句中的字段为大写或小写,后成表后都变成大写了。
这个时候使用select id,title,createUser from sample
可以发现返回的列全是大写的。
若使用
create table sample2(
"id" number(10) ,
"title" varchar2(20),
"createUser" varchar2(20)
);
再次查看发现字段全是引号中的大小写形式,同样注意createUser字段。但再次使用select id,title,createUser from sample2
来查询表,会从后往前报无效的标识符。但是严格按创建时的字段大小写书写,即改为select "id","title","createUser" from sample2
就可以使用。
和同事探讨一下,最终一致达成的说法为: createUser和"createUser"的保存方式是不一样的,对于前者,oracle会自动将字段名转换成大写保存(具体为什么转成大写就不清楚了),而对于后者,既保存了引号中的字面形式也保存了引号(即引号和字段名加在一起做为字段名),但这种引号只能放在两边[1]。
说明: [1]:至于为什么,设想我们想使一个字段为TItLE,得使用语句
create table sample3(
"id" number(10) ,
ti"t"le varchar2(20),
"createUser" varchar2(20)
);
很遗憾,想法很好,但此路不通。 另外我们不使用引号定义字段时不能给字段加*,即语句
create table sample4(
id number(10) ,
title* varchar2(20),
createUser varchar2(20)
);
是不合法的。但加上引号就能用了。即
create table sample5(
"id" number(10) ,
"title*" varchar2(20),
"createUser" varchar2(20)
);
更令人惊讶的是,下面的语句竟也合法:
create table sample6(
"id" number(10) ,
"title*&^%@!\-=+" varchar2(20),
"createUser" varchar2(20)
);
更无语的是,下面的语句也合法:
create table sample6(
id number(10) ,
title$# varchar2(20),
createUser varchar2(20)
);
看来,是得找本相关的书看看了。连这些基础都一知半解。