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 に答える