ORA-00920:|无法通过ibatis设置INTERVAL

时间:2016-05-20 19:32:53

标签: java sql oracle ibatis

好的,经过多次研究后我找不到答案

以下是我尝试通过ibatis执行的SQL查询

<select id="selectSQL" parameterClass="String" resultMap="get-resultMap">   
     SELECT * FROM MY_TABLE WHERE SYSDATE - INTERVAL #value#  DAY > LAST_UPD_DTIM
 </select>

这会抛出错误

--- Cause: java.sql.SQLSyntaxErrorException: ORA-00920: invalid relational operator

但是当我对间隔值进行硬编码时,它可以正常工作

SELECT * FROM MY_TABLE WHERE SYSDATE - INTERVAL '90'  DAY > LAST_UPD_DTIM 

这里有什么问题?

1 个答案:

答案 0 :(得分:1)

好的,最后我发现了这个问题。这里的问题是表达式

INTERVAL -'90' DAY

是一个文字,所以我们不能用变量(参数)

替换它的一部分

要解决此问题,我使用了函数NUMTODSINTERVAL

<select id="selectSQL" parameterClass="String" resultMap="get-resultMap">   
   SELECT * FROM MY_TABLE WHERE SYSDATE - NUMTODSINTERVAL(#value#, 'DAY') > LAST_UPD_DTIM
 </select>