標籤:
-- 建立序列 create sequence 序列名稱 start with 1 -- 起始值 increment by 1 -- 增量 maxvalue 99999999 -- 最大值 nocycle -- 達到最大值後是否重新計算,當前為不重新計算,cycle為重新計算 nocache; -- 不要緩衝,容易跳號
-- 建立觸發器 CREATE OR REPLACE TRIGGER 觸發器名稱 BEFORE INSERT ON 表名稱 FOR EACH ROW BEGIN SELECT 序列名稱.NEXTVAL INTO :NEW.欄位名稱 FROM DUAL; END;
說明:需要先建個序列,再建與此對應的觸發器。最好每張表都這麼建。 每次插入記錄時就會自動向識別欄位中插值了。
測試代碼:
?
| 1234567891011121314151617181920 |
--建立表create table t_windturbine_day(id number primary key,createdate nvarchar2(25),windturbinecode varchar(5),indicode number(5),indivalue varchar2(10),passflage INTEGER default(0) );--建立序列create sequence seq_windturbine_day increment by 1 start with 1000000 nomaxvalue nominvalue nocache ;--建立觸發器create or replace trigger tr_windturbine_day before insert on t_windturbine_day for each rowbegin select seq_windturbine_day.nextval into :new.id from dual; end;--插入資料insert into t_windturbine_day(createdate,windturbinecode,indicode,indivalue)values(‘20131108‘,18,10002,‘3.95‘);--通過這種方式插入,步長為1,但是id一次長2(第3條數)。為什嗎?我認為是觸發器增長了1,--seq_windturbine_day.nextval又增長了1所導致的。不知道對不對?insert into t_windturbine_day(id,createdate,windturbinecode,indicode,indivalue)values(seq_windturbine_day.nextval,‘20131108‘,18,10002,‘3.95‘);--查詢資料select * from t_windturbine_day t; |
測試結果:
Oracle 觸發器和序列的建立和使用 (自動成長列)