事情的起因是这样的,由于跨团队开发,我们team只需要读取对应Orcale库的数据即可,没有其它权限,那么问题来了
mybatis集成Orcale库进行where查询的时候发现一直出现:
java.sql.SQLSyntaxErrorException: ORA-00904: “BRAND”: 标识符无效
解决思路
- 一般出现这样问题首先想到的是实体与数据库字段是否对应
- 未出现异常,将console打印出来的数据放到Orcale库中跑看是否正常
原因
由于操作Orcale权限有限,仔细核对发现别的团队使用的是Navicat创建的数据库表,那么问题来了,花了一会儿工夫找出原因: 使用Navicat创建Orcale表的时候默认是加双引号的,结果我就一直填坑.
解决方案
方案1: 修改建表语句
//Navicat建表数据样例
CREATE TABLE "FSBSDB_1"."BS_EVALUATE_MANAGE" (
"evaluateManageId" NUMBER NOT NULL
)
//修改为
CREATE TABLE "FSBSDB_1"."BS_EVALUATE_MANAGE" (
evaluateManageId NUMBER NOT NULL
)
方案2: 由于操作权限有限,修改Myabtis的mapper文件
<select id="findWeeksByMonths" parameterType="xxx" resultType="xxx">
select * from PR_FA_ALL m
<where>
<if test="geo != null"> and "geo" = #{geo}</if>
<if test="subgeo != null"> and "subgeo" = #{subgeo}</if>
<if test="segment != null"> and "segment" = #{segment}</if>
<if test="brand != null"> and "brand " = #{brand}</if>
AND TO_CHAR(to_date(m."month",'yyyy-MM'),'yyyy-MM') BETWEEN TO_CHAR(to_date(#{startTime},'yyyy-MM'),'yyyy-MM')
AND TO_CHAR(to_date(#{endTime},'yyyy-MM'),'yyyy-MM')
</where>
ORDER BY TO_CHAR(to_date(m."month",'yyyy-MM'),'yyyy-MM') ASC
</select>
记录自己的Orcale的学习踩坑过程