Mybatis REGEXP_LIKE 사용시 에러

2025. 1. 15. 22:23Java/mybatis

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>

 

'Java > mybatis' 카테고리의 다른 글

Mybatis 반복문 처리  (0) 2025.01.15
Mybatis ${} 사용시 SQL Injection 피하기  (0) 2025.01.15
Mybatis null처리를 위한 <If>와 NVL 비교  (0) 2025.01.12
Mybatis 로그 설정  (0) 2024.12.28
Mybatis insert후 키값 반환하기  (0) 2024.12.27