Oracle 觸發器和序列的建立和使用 (自動成長列)

來源:互聯網
上載者:User

標籤:

-- 建立序列 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 觸發器和序列的建立和使用 (自動成長列)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.