定義自動增量時,我一直在尋找一種方式來定義的Oracle自動增量數據類型和已經發現的堆棧溢出這些問題:行爲插入觸發了Oracle
使用自動增量類型的方法包括定義一個序列和觸發器以使插入透明,其中插入觸發器如下所示:
create trigger mytable_trg
before insert on mytable
for each row
when (new.id is null)
begin
select myseq.nextval into :new.id from dual;
end;
我對這個觸發器的行爲有些疑惑:
- 這是什麼觸發時做「ID」的提供的值是NULL有什麼不同?
- 「新」之前的冒號是什麼意思?
我想觸發器插入新的行,序列的下一個值作爲ID,無論提供的「new.id」是什麼值。我想如果提供的ID是NULL,那麼WHEN語句使觸發器只插入新行(否則它不會插入或失敗)。
我可以只刪除WHEN語句以使觸發器始終使用序列的下一個值插入嗎?
所以,如果我手動指定的值(NULL以外),我可以插入使用「的ID值的新行「已在使用中(僅在」id「列不是唯一的情況下)。我錯了嗎? 我可以只刪除WHEN語句,以便觸發器始終使用序列的下一個值插入(忽略提供的「new.id」值)? – Genba 2010-06-07 12:34:58
@Genba:你說的都對。事實上,允許手動輸入免費ID可能會產生令人厭惡的副作用:該序列將來可能會生成該值。 – 2010-06-07 14:08:39