Java/mybatis
Mybatis REGEXP_LIKE 사용시 에러
바리새인
2025. 1. 15. 22:23
Mapper.xml
<otherwise>
AND ${condition.data} ${condition.compare}
CASE
WHEN NOT REGEXP_LIKE(#{condition.value}, '^\d+(\.\d+)?$') THEN #{condition.value}
ELSE TO_CHAR(TO_NUMBER(#{condition.value}))
END
</otherwise>
에러
java.sql.SQLSyntaxErrorException: ORA-00932: 일관성 없는 데이터 유형: CHAR이(가) 필요하지만 NUMBER임
쿼리 결과
AND DATA1 =
CASE
WHEN NOT REGEXP_LIKE('EX', '^\d+(\.\d+)'EX'$') THEN 'EX'
ELSE TO_NUMBER(1)
END
조치: 쿼리로 안되서 앞에서 데이터 타입 조절함
Java
public boolean isNumeric(String str) {
return str != null && str.matches("\\d+(\\.\\d+)?");
}
boolean isNumeric = isNumeric(condition.getValue());
condition.put("isNumeric", isNumeric);
Mapper.xml
<choose>
<when test="!condition.isNumeric">
AND ${condition.data} ${condition.compare} #{condition.value}
</when>
<otherwise>
AND ${condition.data} ${condition.compare} TO_NUMBER(#{condition.value})
</otherwise>
</choose>