我可以为几个表使用一个触发器和一个序列(作为pk的auto_increment)吗?

时间:2014-03-16 19:01:55

标签: oracle oracle11g

什么是选项CACHE?

CREATE SEQUENCE Race_SEQ
  START WITH 1
  INCREMENT BY 1
  CACHE 10;

CREATE OR REPLACE TRIGGER RACE_INC
  BEFORE INSERT ON RACE
  FOR EACH ROW
  BEGIN
    :NEW.RACE_ID := RACE_SEQ.NEXTVAL;
  END;

1 个答案:

答案 0 :(得分:2)

您可以使用相同的序列为许多表生成主键。这样做通常没有多大意义,但你可以做到。如果使用race_seq来填充race表并且foo_seq用于表示foo,则通常不会花费任何成本来获得许多不同的序列。填充cache表,而不是让所有表使用相同的序列。

每个表需要一个触发器。触发器只能在单个表上定义。

{{1}}属性指定应缓存序列的值(如果您恰好使用RAC,则为每个节点)。这使得生成新值更有效,代价是增加创建的间隙数量。通常,您可以使用较大的缓存来插入更频繁的行。