繁体   English   中英

在oracle11g中插入行后发生回退的奇怪错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM