一、解决方案
1、在表名、字段名、对象名上加上双引号,即可实现让oracle大小写区分。
2、但是这又引起了另一个问题:在数据库操作中,sql语句中相应的表名、字段名、对象名上一定要加双引号。
解决办法是:使用"\"转义。如:
String sql = "select * from userinfo where \"loginId\"=? and loginpwd=?";
二、详解
一 般情况下,使用者在进行Oracle开发或管理里都不会对ORACLE对像名大小写进行区别,因为ORALCE在普通情况下会将所有小写都转换为大写进行 处理,所以可以说是大小写不敏感的。但是实际ORACLE内部有它一套完整的对像名处理方式。本文将从实例进行分析与探讨ORACLE对像名大小写敏感性 的处理机制。
可 能很多人在工作已经了解到,ORACLE在创建对像时是可以加引号的,如果不加引号则不能使用特别字符,只能使用以字母开头的命名。如果加了引号就可以在 对像名里使用任何字符,包括数字开头、下划线、逗号等等。在导出SQLSERVER2000的对像创建脚本时一般是加了引号的,所以经常有人说脚本在 ORACLE中运行后对像不能访问的问题。
注:
1、 本文是以ORACLE9.2为测试分析版本
2、 本文中提到的ORACLE对像名包括ORACLE中的表名、视图名、字段名、函数名等等。
以下为创建表及访问使用不同命名方式的一个实例,测试结果如下:
Connected to Oracle9i Enterprise Edition Release 9.2.0.7.0
Connected as *****
SQL> create table mytable1
2 (
3 C1 VARCHAR2(6)
4 );
Table created
SQL> select * from "MYTABLE1";
C1
------
SQL> select * from MYtable1;
C1
------
SQL> select * from "mytable1";
select * from "mytable1"
ORA-00942: 表或视图不存在
SQL> drop table mytable1;
Table dropped
SQL>
SQL>
SQL> create table "mytable1"
2 (
3 C1 VARCHAR2(6)
4 );
Table created
SQL> select * from "mytable1";
C1
------
SQL> select * from mytable1;
select * from mytable1
ORA-00942: 表或视图不存在
SQL> select * from MYTABLE1;
select * from MYTABLE1
ORA-00942: 表或视图不存在
测试结果汇总:
√表示允许访问,×表示不允许访问。
读取
创建 mytable1 MYTABLE1 “mytable1” “MYTABLE1”
mytable1 √ √ × √
MYTABLE1 √ √ × √
“mytable1” × × √ ×
“MYTABLE1” √ √ × √
总结:
读取
创建 小写字母 大写字母 加引号小写字母 加引号大写字母
小写字母 √ √ × √
大写字母 √ √ × √
加引号小写字母 × × √ ×
加引号大写字母 √ √ × √
分析结论:
ORACLE在创建对像时如果没有加引号,对存入数据字典时都会将对像名小写字母转换成大写字母存储,如mytable将转换成MYTABLE;如果创建时加了引号,则以引号内的实际字符存储。
访问时如果没加引号则会将小写字母转换成大写字母再访问,如mytable将转换成MYTABLE;如果加了引号则以引号内的实际字符访问。
ORACLE在读取数据字典时只要发现对像名里有小写字母或者是除字母汉字以外开头的字符都认为是大小写敏感的,并且要求在访问时需要加上引号。
分享到:
相关推荐
Oracle数据库在默认情况下被广泛认为对对象名大小写不敏感,这是因为Oracle会自动将所有未引号标识的小写字母转换为大写。然而,Oracle实际上有一套复杂的规则来处理对象名的大小写敏感性,这在某些特定情况下可能会...
- 当使用PowerDesigner生成SQL脚本时,它会在表名和字段名周围添加双引号,这样在Oracle中创建表时就会保留这些名称的原始大小写格式。 2. **手动编写带有双引号的SQL脚本:** - 直接在SQL脚本中为表名和字段名...
请注意,`table_name`需要与实际的表名匹配,且在Oracle中,表名通常是区分大小写的,因此要确保输入正确的大小写格式。 另一种方法,特别是当你需要以特定分隔符(例如逗号)连接所有字段名时,可以利用Oracle特有...
POWERDESIGNER 生成 Oracle 表名带有引号的问题可以通过修改表名或取消大小写敏感性来解决。 POWERDESIGNER 是一款功能强大的数据建模工具,可以帮助用户设计、生成和管理数据库结构。了解 POWERDESIGNER 和 Oracle...
注意,由于使用了`${}`,你需要确保传入的表名和字段名是安全的,并且在传入字段名时,如果它是字符串,记得在传入参数前加上单引号,以避免SQL注入问题,例如`String columnName = "'" + columnName + "'"`。...
在Oracle数据库中,对于数据字典中的表名和字段名,Oracle实际上处理这些名称时默认是大小写敏感的。这意味着如果创建了一个名为`myTable`的表,并且其中包含一个名为`myField`的字段,在查询或引用这些表名和字段名...
在Oracle中,双引号的作用是标识一个标识符(如表名、列名)为一个区分大小写的标识,并且允许使用Oracle关键字作为标识符。例如,如果我们有一个字段名叫做`UID`,而`UID`是Oracle的一个关键字,我们可以这样创建表...
1. **大小写敏感性**:在默认的NLS_UPPER参数设置下,Oracle数据库是不区分大小写的,也就是说,'MyTable' 和 'mytable' 被视为同一个表名。但是,如果你在创建表时使用双引号将名称括起来,Oracle将保留大小写,...
解决方案是确保MySQL的数据库名与Oracle的大小写一致,表名和应用程序中的SQL字符串保持一致,对于字段名,如果在应用程序中使用了双引号,应确保SQL中的大小写与双引号内的字符相同。 2. **保留字问题**:Oracle...
考虑到大小写规则的记忆复杂度以及部分数据库对大小写的不敏感性,建议统一使用小写字母,以减少混淆和错误。 ### 数据库对象命名规范 #### 表、视图、存储过程、函数与约束 - **前缀与实际名字**:对象名字由...
例如,给出的`updateclob`过程是一个动态更新Clob字段的例子,它接受表名、唯一标识字段名、Clob字段名、记录号、处理字符的起始位置以及要插入的字符串变量。该过程首先构建SQL查询语句,然后使用EXECUTE IMMEDIATE...
在Oracle中,SQL语句的大小写在语法上是不敏感的,但性能上可能存在差异。此外,在实际开发中,遵循一致的命名和书写规范是非常重要的。 ### 10. WHERE子句 `WHERE`子句用于过滤结果集,例如筛选年薪超过12000的...
注意,在 MySQL 端,需要注意表名和字段名的大小写,因为 MySQL 是大小写敏感的,而 Oracle 数据库对大小写不敏感。 3. 配置 GoldenGate 在 MySQL 端,需要配置 GoldenGate,以便它可以正确地捕获 Oracle 数据库的...
通过调用存储过程`pr_CreateIdentityColumn`,传入表名和自增字段名,可以为每个需要自增字段的表创建Sequence和Trigger。例如: ```sql exec pr_createidentitycolumn('sdspdept','deptid'); exec pr_...
update 表名 set 字段名 = 字段值 where 要判断的字段名 = 要判断的字段值; 如果你要进行判断的字段值为null 要写 update 表名 set 字段名 = 字段值 where 要判断的字段名 is null; 4.删除记录 delete from 表名 ...
首先,Oracle是大小写敏感的,这意味着在编写SQL语句时,需要特别注意变量名、表名和字段名的大小写。在条件表达式中,`OR`和`AND`用于组合多个条件,而`BETWEEN`用于在指定范围内查找值,包括边界。例如,`WHERE ...
- Oracle数据库通常区分大小写,所以表名、列名在Oracle中必须与Access中的完全匹配,包括大小写。在Oracle中查询时,未正确引用的表名会导致找不到对象的错误。 - Access不区分大小写,但在Oracle中,你需要确保...
ALTER TABLE 表名 MOVE TABLESPACE 新表空间名 LOB (字段名) STORE AS (TABLESPACE 新表空间名); ``` 这样可以确保大对象字段也被正确地存储在目标表空间中。 #### 5. 分区表的处理 对于分区表,每个分区都可以...
- 使用全部大写字母进行命名,避免大小写混合。 - 单个英文单词应使用单数形式,如`FACTORY`。 - 缩写形式时,采用大写的英文单词缩写,例如部门表可以命名为`DEPT`。 - 多个英文单词之间使用下划线连接,并确保...