Исключение SQL с использованием MyBatis - PullRequest
0 голосов
/ 25 октября 2018

У меня проблема.При запуске этого MyBatis выберите:

<select id="findIdByCode" resultType="long">
        select USER_ID from PWD_REST_CODE
        where RESTORATION_CODE = #{code}
        and current_date between date_from and DATE_FROM + interval #{interval} second
</select>

Я получил исключение EJB:

EJB exception occurred during invocation from home or business: 
com.project.auth.ejb.data.UserManagerBean_rdl8zk_Intf generated exception: 
org.apache.ibatis.exceptions.PersistenceException: ### Error querying 
database. Cause: java.sql.SQLSyntaxErrorException: ORA-00933: неверное 
завершение SQL-предложения ### The error may exist in 
com/project/auth/dao/UserDAO.xml ### The error may involve 
defaultParameterMap ### The error occurred while setting parameters ### SQL: 
select USER_ID from PWD_REST_CODE where RESTORATION_CODE = ? and current_date 
between date_from and DATE_FROM + interval ? second ### Cause: 
java.sql.SQLSyntaxErrorException: ORA-00933: неверное завершение SQL-предложения 

(неверное завершение SQL-предложения означает SQL command not properly ended)

Но когда я запускаю точнотот же запрос в менеджере баз данных:

    select USER_ID from PWD_REST_CODE
    where RESTORATION_CODE = '217799dfHj'
    and current_date between date_from and DATE_FROM + interval '86400' second

Я получил заслуженный идентификатор (user_id, 5).Почему это происходит?

1 Ответ

0 голосов
/ 25 октября 2018

Как правильно написал Marmite Bomber в комментариях, вы не можете использовать число в литерале INTERVAL.Используйте функцию numToDSInterval для преобразования числа в интервал:

<select id="findIdByCode" resultType="long">
     select USER_ID from PWD_REST_CODE
     where RESTORATION_CODE = #{code}
         and current_date between date_from
         and DATE_FROM + numToDSInterval( #{interval}, 'second' )
</select>
...