Oracle使用觸發器實現ID自增的問題

chenbin520發表於2012-10-31

資料庫表OperationLog的ID是使用觸發器實現自增的。

觸發器:

create or replace trigger SystemOperationLogAutoAddID
  before insert on     REFERENCING
  NEW AS new
  OLD AS old
    for each row
begin
  SELECT systemoperationlog_INDEXID.NEXTVAL INTO :new.ID FROM sys.dual;
    dbms_output.put_line(:new.ID);
end SystemOperationLogAutoAddID;

今天從其他資料庫中備份了表,並匯入到我的資料庫中。再在OperationLog表中插入資料時總是報主鍵衝突。

後來使用輸出語句dbms_output.put_line(:new.ID);輸出觸發器獲取的ID,發現ID很小。原來觸發器只有在實際往表中插入資料的時候才會ID加1(初始化為1),一開始因為表中有幾萬條資料,但觸發器獲取的ID才為21,所以主鍵一定會衝突了。

 

Oracle觸發器除錯:http://blog.csdn.net/jbgtwang/article/details/4296667

相關文章