When opening a cursor with FOR UPDATE, the cursor creates a DML lock. On COMMIT or ROLLBACK, that lock is released, closing the cursor. To get around this, use the ROWID to determine the unique identifier for the row.
// *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.检查你程序看看有没有问题,或者在你操作的那个时候正好有其他程序也正在操作该表
// 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.检查你程序看看有没有问题,或者在你操作的那个时候正好有其他程序也正在操作该表