不過離題了。這次不是要記錄 Toad 多強,而是遇到了序列問題。
新版 Oracle 12 不太清楚,但就我使用 9.2 的經驗中得知 Oracle 並沒有像 SQL Server 一樣提供自動識別編號的功能,雖說如此,但仍可利用 Sequence 及 Trigger 搭配達到相同的效果。當然,這要寫 SQL 的,但透過 Toad,其實非常容易達到:
CREATE OR REPLACE TRIGGER USER.TEST_TRG
BEFORE INSERT
ON USER.TEST
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
:new.ID := TEST_SEQ.nextval;
END TEST_TRG;
建完 Sequence/Trigger Pair 後資料表執行一段時間,若突然有「直接跳號到指定編號」需求時,這時就得要動些手腳了:首先,要先知道目前已知的編號 (如: 168) 及目標編號 (如: 210) 是多少
select max(ID) from TEST; --取得: 168 --或
select TEST_SEQ.currval from dual; --使用 currval 取得當前 Sequence 值
換算兩者差距,將其設為 Increment (如: 210-168 + 1 = 41)alter sequence TEST_SEQ increment by 41;執行 Sequence,直接跳號到 209select TEST_SEQ.nextval from dual; --跳號到 209接著將 Increment 改回 1alter sequence TEST_SEQ increment by 1;接下來新增的序號就從 210 開始編囉
沒有留言 :
張貼留言
注意:只有此網誌的成員可以留言。