[英]Strange error inserting rows followed by a rollback in oracle11g
编写脚本来测试(待编写)触发器,但是如果回滚更改,则会收到一条奇怪的错误消息。 这是测试脚本
insert into prescription values(
143, 115,
to_date('January 15, 1989, 11:00 A.M.',
'Month dd, YYYY, HH:MI A.M.',
'NLS_DATE_LANGUAGE = American'),
5, 12, 'hours', 12);
select * from prescription;
rollback;
在select语句返回的行中滚动大约一半后,表蒸发,并且出现错误消息:
ORA-01002: fetch out of sequence
01002. 00000 - "fetch out of sequence"
*Cause: This error means that a fetch has been attempted from a cursor
which is no longer valid. Note that a PL/SQL cursor loop
implicitly does fetches, and thus may also cause this error.
There are a number of possible causes for this error, including:
1) Fetching from a cursor after the last row has been retrieved
and the ORA-1403 error returned.
2) If the cursor has been opened with the FOR UPDATE clause,
fetching after a COMMIT has been issued will return the error.
3) Rebinding any placeholders in the SQL statement, then issuing
a fetch before reexecuting the statement.
*Action: 1) Do not issue a fetch statement after the last row has been
retrieved - there are no more rows to fetch.
2) Do not issue a COMMIT inside a fetch loop for a cursor
that has been opened FOR UPDATE.
3) Reexecute the statement after rebinding, then attempt to
fetch again.
如果我在没有回滚的情况下运行脚本,然后分别发出回滚,则一切正常。 但这将使以后的测试单元变得烦人。
发现问题了! 事实证明,默认情况下oracle SQL开发人员一次仅返回50行。 因此,当我开始向下滚动时,它将关闭并获取接下来的50行,这可能导致无效的结果,因为选择是在回滚之前发出的,并且出现错误。 通过进入preference-> database并更改返回大小来解决,幸运的是,对我来说,返回大小刚好在它们允许的最大数量之内(200个结果)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.