ORA-01002:取乱序(ORA-01002: fetch out of sequence)

2019-10-21 05:51发布

我得到org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback; 未分类的SQLException为SQL

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:取出序列的

Java代码:

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

请让我知道什么是错在上面的查询

Answer 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)

注意:虽然你可以使用上面的修改后的查询,但我怀疑上述错误的原因是发布更新语句。 从文档 ,它看起来像上述错误的原因可能是

当您执行上的活动游标提取后的所有记录都被取出。

(要么)

当您执行一个SELECT一个FETCH FOR UPDATE一个COMMIT已发出之后。



文章来源: ORA-01002: fetch out of sequence