2

如何为具有顺序主键的 Oracle 数据库编写插入查询,以便插入语句自动获取序列中的下一个数字?

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', )

在上面的语句中,我已经硬编码了键 'USER_ROLE_ID' 的值 100,但我想按照第一段中的说明进行更改。

4

2 回答 2

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)。

于 2012-07-05T12:56:12.187 回答
4

除了使用触发器之外,您还可以直接在插入语句中使用序列:

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', )
于 2012-07-05T13:05:49.503 回答