ORA-01002:取消顺序

时间:2014-11-03 04:44:39

标签: sql spring oracle spring-jdbc

我正在获取org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback;未分类SQL的SQLException

UPDATE responses 
SET    version_no = ( version_no + 1 ), 
       read_status = 0, 
       tslastmodified = SYSDATE 
WHERE  responseid IN (SELECT responseid 
                      FROM   responses 
                      WHERE  read_status = 1 
                             AND tslastmodified < SYSDATE - 45 / ( 24 * 60 ) 
                             AND id IN (SELECT id 
                                        FROM   emp)) 

SQL状态[24000];错误代码[1002]; ORA-01002:取消顺序 ;嵌套异常是java.sql.SQLException:ORA-01002:fetch out of sequence

JAVA代码:

getJdbcTemplate().queryForObject(SurveyQuery.UPDATE_INPROCESS, Integer.class);

请告诉我上述查询中的错误

1 个答案:

答案 0 :(得分:1)

您可以将UPDATE语句修改为以下内容

UPDATE RESPONSES SET VERSION_NO=(VERSION_NO+1), 
READ_STATUS=0, 
TSLASTMODIFIED = SYSDATE 
WHERE READ_STATUS = 1 
AND TSLASTMODIFIED < SYSDATE - 45/(24*60) 
AND EXISTS (SELECT 1 FROM EMP
            WHERE RESPONSES.ID = EMP.ID)

注意:虽然您可以使用上面修改过的查询,但我怀疑上述错误是因为发布的更新语句。从Documentation看起来上述错误的原因可能是

  

在所有记录都有活动光标后执行FETCH时   被抓了。

     

(OR)

     

在COMMIT之后在SELECT FOR UPDATE上执行FETCH时   已经发行。