oracle执行大sql,mybatis连接oracle执行sql语句出现ORA

使用mybatis连接oracle数据库进行查询,最好确保表命全大写,否者会出现ORA-00904: invalid identifier的问题

注:本人使用的mybatis版本是3.0.5

二、问题描述:

我使用ibator工具产生的代码,有一个Dao的测试类,但是一执行就出现了ORA-00904: invalid identifier,如图:

e3c99a38b4833bcc65315c2fcfdb7a97.png

原因分析,大部分情况下是由于引用了不存在的列名导致的。 解决的办法就是检查自己引用的列名称是否一致。对于某些工具生成的sql,可能导致列名称和期望不符的情况,比如,有些工具生成的列名称会带双引号,从而导致此错误。

经过查询和本人的实践验证,oracle执行查询时(这里以11g为例),对于特殊的字段命名有着非常严格的语法要求,如果是字段名称按照单词首字母大写的规范进行命名,在进行条件查询的时候必须,字段名称必须与原来命名一样并且要加上双引号,否则会包ORA-00904: invalid identifier。以下是本案例的测试截图:

表结构:

468b6de8b827f5868b20199f36fe44cf.png

执行查询:

1f3638a0512b7dcfe0e5b9773655e0c6.png

从执行的结果可以知道,最终oracle在执行sql语句的时候把条件查询的字段名转成了全大写,遇到表中没有找到相关的字段(区分大小写),就出现了此错误。查询指定字段的值也是如此:

表结构:

db45d45f26de9f2a5f07c6ace0525a67.png

执行查询:

Image5.png

Image6.png

Image7.png

三、解决办法

总结:

3.1oracle在执行sql语句进行查询的时候,默认的情况下(查询的时候不给字段加双引号),会将字段名称转换成全大写之后再到表中进行匹配查询,比如:执行select from dept where id=1,则实际执行的是:select from DEPT where ID=1,这里表名和字段名全部都会转成全大写去匹配查询,一旦匹配不到(真正匹配字段名和名的时候区分大小写),则会报错误。

3.2如果设计表的时候不想表名和字段名都全大写,则在进行查询的时候需要在表名或者字段名称加上双引号(相当于告知oracle不要对sql语句中指定的表名或者字段名转成全大写),并且区分大小写,这样执行查询才不会发生错误。

##解决方法##

因此解决的办法就是,在给字段名称进行命名的时候,建议全大写,对于表名也是全大写命名,这样不管是进行条件查询还是查询指定字段的名称的时候,都不需要严格区分大小写了并且还要加上双引号了,Oracle会自动帮你先转成全大写之后再进行匹配查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值