在 Oracle 中似乎没有 AUTO_INCREMENT 的概念,直到并包括版本 11g。
如何在 Oracle 11g 中创建一个行为类似于自动增量的列?
原文由 Sushan Ghimire 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Oracle 中似乎没有 AUTO_INCREMENT 的概念,直到并包括版本 11g。
如何在 Oracle 11g 中创建一个行为类似于自动增量的列?
原文由 Sushan Ghimire 发布,翻译遵循 CC BY-SA 4.0 许可协议
创建序列:
CREATE SEQUENCE SEQ_CM_LC_FINAL_STATUS
MINVALUE 1 MAXVALUE 999999999999999999999999999
INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE;
添加触发器
CREATE OR REPLACE TRIGGER CM_LC_FINAL_STATUS_TRIGGER
BEFORE INSERT
ON CM_LC_FINAL_STATUS
FOR EACH ROW
BEGIN
:NEW.LC_FINAL_STATUS_NO := SEQ_CM_LC_FINAL_STATUS.NEXTVAL;
END;
第一步是在您的数据库中创建一个 SEQUENCE,这是一个数据对象,多个用户可以访问以自动生成递增值。如文档中所述,Oracle 中的序列可防止同时创建重复值,因为在生成每个序列项之前,多个用户实际上被迫“轮流”。 –
最后,我们将创建我们的 SEQUENCE,稍后将使用它来实际生成唯一的、自动递增的值。 –
虽然我们已经创建了表并准备就绪,但到目前为止,我们的序列只是坐在那里,但从未投入使用。这就是 TRIGGERS 的用武之地。与现代编程语言中的事件类似,Oracle 中的 TRIGGER 是在特定事件发生时执行的存储过程。通常,TRIGGER 将配置为在更新表或删除记录时触发,在必要时提供一些清理。 –
在我们的例子中,我们希望在 INSERT 之前执行我们的 TRIGGER 到我们的 CM_LC_FINAL_STATUS 表中,确保我们的 SEQUENCE 递增并且新值被传递到我们的主键列。
原文由 Mohammad Ali Abdullah 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
1.4k 阅读
从 Oracle 11g 开始, Oracle 中没有“auto_increment”或“identity”列这样的东西。但是,您可以使用序列和触发器轻松建模:
表定义:
触发器定义:
更新:
IDENTITY
列现在在 Oracle 12c 上可用:或指定起始值和增量值,同时防止任何插入标识列(
GENERATED ALWAYS
)(同样,仅限 Oracle 12c+)或者,Oracle 12 还允许使用序列作为默认值: