首頁 > 資料庫 > mysql教程 > 如何為現有Oracle表列新增自動遞增功能?

如何為現有Oracle表列新增自動遞增功能?

DDD
發布: 2024-12-19 02:52:09
原創
961 人瀏覽過

How to Add Auto-Incrementing Functionality to Existing Oracle Table Columns?

現有Oracle表列的自增

在Oracle中,可以實現對已有主鍵的列添加自增功能根據Oracle版本,有不同的方式。

Oracle 11g 和之前

建立一個將遞增列值的序列:

CREATE SEQUENCE t_seq
START WITH 150111111
INCREMENT BY 1;
登入後複製

在插入期間使用觸發器將下一個序列數值分配給欄位:

CREATE OR REPLACE TRIGGER t_trg
BEFORE INSERT ON t
FOR EACH ROW
WHEN (new.id IS NULL)
BEGIN
    SELECT t_seq.NEXTVAL
    INTO   :new.id
    FROM   dual;
END;
登入後複製

Oracle 12c 及更高版本

Oracle 12c 引入了Identity 列,它允許自動遞加值,而不需要序列或觸發器:

CREATE TABLE t
(
    ID NUMBER GENERATED ALWAYS AS IDENTITY
    START WITH 150111111 INCREMENT BY 1,
    text VARCHAR2(50)
);
登入後複製
登入後複製

列就位後,新行將從指定的起始值開始自動遞增。

使用Oracle 11g 的示例

給定表:

TABLE t (
 SEQ_ID NUMBER(10) NOT NULL
);
登入後複製

創建序列“t_seq”和触發器“t_trg”後,插入新行:

INSERT INTO t(text) VALUES('auto-increment test 1');
INSERT INTO t(text) VALUES('auto-increment test 2');
登入後複製

查詢表以驗證自增:

SELECT * FROM t;
登入後複製
登入後複製

使用Oracle 的範例12c

表定義為:

CREATE TABLE t
(
    ID NUMBER GENERATED ALWAYS AS IDENTITY
    START WITH 150111111 INCREMENT BY 1,
    text VARCHAR2(50)
);
登入後複製
登入後複製

插入新行:

INSERT INTO t(text) VALUES('This table has an identity column');
登入後複製

插入新行:
SELECT * FROM t;
登入後複製
登入後複製
查詢表格進行確認:

在兩個 Oracle 版本中,列「ID」現在將從指定的起始位置開始自動遞增值 (150111111),步長為 1。

以上是如何為現有Oracle表列新增自動遞增功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板