oracle表大小写问题
oracle对包括表名在内的所有对象名的大小写在一般情况下都是不区分的,因为它默认会将所有小写对象名转化为大写!
因为这个特性,导致表面看来oracle好像是不区分大小写的。但实际上oracle内部有两种对象名处理方式:加引号方式和不加引号方式。
(1)当不加引号时,对象名只能使用以字母开头的普通字符,并且会自动将所有小写字符转为大写字符;
(2)当加引号时,对象名可以使用任何字符,包括各种符号字符,同时也区分大小写!加引号可以理解为,严格按照引号里面的字符名进行建表
在写sql时候,无论表名和字段名都不要加引号,这样比较安全。
另外,在使用pd生成sql时,应该要注意一下,pd默认是会添加引号的。
摘抄如下:
用PowerDesigner生成数据库建表SQL脚本时,尤其是Oracle数据库时,表名一般会带引号。其实加引号是PL/SQL的规范,数据库会严格按照“”中的名称建表,如果没有“”,会按照ORACLE默认的设置建表(DBA STUDIO里面),默认是全部大写,这样,在ORACLE数据库里的字段就如“Column_1”。如果你把引号去掉,ORACLE自动默认为全部大写,即“COLUMN_1”,所以这段SQL在PL/SQL中执行的时候是没有任何问题的,如果不加引号,在PL/SQL会自动识别为大写。
如果加了引号,sql或者hql查询“Column_1='XXX'”时,就会报错:ORA-00904: "COLUMN_1": 无效的标识符,除非写为“‘Column_1’='XXX'”。也就是说,如果创建的时候加了引号,查询和使用的时候也要加引号,所以,如果没有特别要求,还是不加引号的方便。
这个问题是生成脚本格式的问题,因此,我们可以尝试在DBMS配置文件中修改相应的格式设置来解决这个问题。选择DBMS Properties,选择Script->Sql->Format,有一项CaseSensitivityUsingQuote,它的comment为“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否适用双引号来规定标识符的大小写,可以看到右边的values默认值为“YES”,改为“No”,点击【应用】按钮。这样就可以不添加引号了!