2012-07-05 22 views
2

如何爲具有順序主鍵的Oracle數據庫編寫插入查詢,以便插入語句自動獲取序列中的下一個數字?在INSERT查詢中對主鍵使用順序值

INSERT INTO LD_USER_ROLE(USER_ROLE_ID,INS_USER,INS_DATE, USERNAME) 
VALUES (100, 'sp22',to_date('2003/05/03 21:02:44','yyyy/mm/dd hh24:mi:ss'),'JOHN BARRY',) 

在上述發言中,我已經硬編碼的100爲重點「USER_ROLE_ID」的價值,但我想改變這種在第一段的解釋。

回答

4

除了使用觸發器,您可以直接在INSERT語句中使用的順序:

CREATE SEQUENCE LD_USER_ROLE_SEQ; 

INSERT INTO LD_USER_ROLE 
    (USER_ROLE_ID,INS_USER,INS_DATE, USERNAME) 
VALUES 
    (ld_user_role_seq.nextval, 'sp22',to_date('2003/05/03 21:02:44','yyyy/mm/dd hh24:mi:ss'),'JOHN BARRY',) 
5

你爲什麼不只是創建一個觸發您的序列是這樣的:

順序:

CREATE SEQUENCE LD_USER_ROLE_SEQ 
    INCREMENT BY 1 START WITH 1 NOMAXVALUE NOMINVALUE NOCYCLE NOCACHE NOORDER 

觸發:

CREATE TRIGGER LD_USER_ROLE_INSERT BEFORE INSERT ON LD_USER_ROLE 
    REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW 
BEGIN 
    SELECT LD_USER_ROLE_SEQ.NEXTVAL INTO :NEW.USER_ROLE_ID FROM DUAL; 
END; 

觸發器將自動獲得下一個值/每個插入的id(像mysql中的auto_increment)。

+0

你CREATE SEQUENCE的結束需要一個分號,布拉赫。 – 2013-08-07 18:12:31