ORA-25017: cannot reference NEW ROWID for movable rows in before triggers

文档解释

ORA-25017: cannot reference NEW ROWID for movable rows in before triggers

Cause: NEW ROWID was referenced in a before row trigger which is defined on an index-organized table, or a partitioned table with enabled movement of rows. The ROWID cannot be computed in a before row update trigger because it depends on the actual values of the row

Action: Remove references to NEW ROWID from the trigger definition.

ORA-25017: 不允许在before触发器中引用可移动行的NEW ROWID

官方解释

当在一个before触发器中查询系统表NEW,将会导致ora-25017错误。25017 代码表明,当在before触发器中使用系统表NEW时,未引用可移动行。

常见案例

当在before触发器中查询系统表NEW时,将导致ORA-25017错误。最可能在delete或update操作时发生,如果该表有before触发器,便可能导致该错误。

一般处理方法及步骤

1. 避免使用触发器,而是把相关逻辑放到应用层中。

2. 如果必须使用触发器,那么注意当在before触发器中不要引用可移动行的NEW ROWID。

3. 使用for each row模式时,可以使用:NEW.COLUMN,但是不能直接使用NEW ROWID,因为在不同的数据库操作系统中ROWID的存储方式不同。

你可能感兴趣的