如何编写基于 Auto 递增值的 Oracle 触发器?

Posted

技术标签:

【中文标题】如何编写基于 Auto 递增值的 Oracle 触发器?【英文标题】:How to write an Oracle trigger based on Auto incremented value? 【发布时间】:2011-09-11 09:24:00 【问题描述】:

我有一个带有以下键的 Oracle 表:ID、名称、DoB、Dept 和 FileNo。 ID 字段是具有自动递增值的主键。

我希望编写一个触发器,以便在添加一行时添加 Name、DoB 和 Dept ,FileNo 字段应该得到值 yyyy/xxxx ,其中 'yyyy' 是预定义的字符串 & 'xxxx' 是值在 ID 字段中。

我该怎么做?

【问题讨论】:

也许你需要一个简单的视图或物化视图。 【参考方案1】:

您需要一个序列来实现自动增量值:

create sequence seq_file_id start with 1 increment by 1;

还有一个表上的触发器

CREATE TRIGGER file_trg 
   BEFORE insert 
   ON file_table 
   FOR EACH ROW
BEGIN
      SELECT seq_file_id.NEXTVAL INTO :new.id FROM dual;
      :NEW.fileno := 'yyyy' || :new.id;

END;
/

【讨论】:

【参考方案2】:

如果它总是带有一些前缀的 ID,那么它可能不应该是一个列。如果这是默认设置,那么设置:new.fileno := 'string'||:new.id 的触发器就足够了。

Oracle 没有自动递增功能,因此您可能指的是序列。如果你有一个触发器填充它,那么它可以进入同一个触发器。

【讨论】:

以上是关于如何编写基于 Auto 递增值的 Oracle 触发器?的主要内容,如果未能解决你的问题,请参考以下文章

更新表和值的单列应从 0 开始,然后应递增 1

使用自动递增的 ID 作为值的一部分将条目插入到其表中

按组自动递增

如何从现有排名值创建具有递增排名值的运行范围的表?

如何将数据插入具有自动递增主键的 MySQL?

如何将具有自动递增值的列添加到 mySql 数据库的表中?