Oracle 11g以前 Aato_increment

Oracle 11g 開始, Oracle 中沒有“auto_increment”或“identity”列這樣的東西

可以使用序列和触發器輕鬆地對其建模:


創建資料庫

CREATE TABLE SYSTEM_STATUS_ROW(
ROW_ID NUMBER(38,0) NOT NULL
 PRIMARY KEY,
  SERVICE   VARCHAR2(50)  NOT NULL,
  CREATEDAT TIMESTAMP    NOT NULL,
  ISALIVE   NUMBER(38,0) DEFAULT 0,
  RESPONSECODE NUMBER
);

程序列

CREATE SEQUENCE SYSTEM_STAUTS_LOG_ROW INCREMENT BY 1 START WITH 1;
觸發程式(tigger)
CREATE OR REPLACE TRIGGER SYSTEM_STAUTS_LOG_ROW 
BEFORE INSERT ON SYSTEM_STAUTS_LOG 
FOR EACH ROW
BEGIN
  SELECT SYSTEM_STATUS_ROW.NEXTVAL
  INTO   :new.row_id
  FROM   dual;
END;
-------------------------------------------
IDENTITY專欄現已在 Oracle 12c 上可用:
create table t1 (
    c1 NUMBER GENERATED by default on null as IDENTITY,
    c2 VARCHAR2(10)
    );

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
    );
------------------------------------------
或者,Oracle 12 還允許使用序列作為默認值:

CREATE SEQUENCE dept_seq START WITH 1;

CREATE TABLE departments (
  ID           NUMBER(10)    DEFAULT dept_seq.nextval NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID));

留言

這個網誌中的熱門文章

安裝 phpldapadmin

LDAP log紀錄

LDAP 存取控制 slapd.conf(伺服器設定檔)