现有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中文网其他相关文章!