oracle触发合成密钥

时间:2015-11-10 23:15:56

标签: sql oracle triggers sequence

我正在尝试使用序列(attribute_1)创建合成密钥。我不确定我的代码是否正常工作,因为这是我第一次做这样的事情。我只是在寻找关于我在做什么的一般指示或提示。

CREATE TABLE entity
(
attribute_1 INT NOT NULL PRIMARY KEY,
attribute_2 VARCHAR2(5),
attribute_3 NOT NULL VARCHAR2(5)
);

CREATE SEQUENCE attribute_1_seq
START WITH 1
INCREMENT BY 1
NOCACHE;

CREATE TRIGGER attribute_1_trig
BEFORE INSERT ON entity
FOR EACH ROW BEGIN
    SELECT attribute_1_seq.NEXTVAL INTO :new.attribute_1 FROM dual;
    END;
    /

1 个答案:

答案 0 :(得分:1)

您的触发器会起作用,但如果您想提供ID号怎么办?某些应用程序将插入父级并使用id作为子表的外键。在这种情况下,您可能希望直接调用序列,以便重复使用它。

此触发器允许您插入null作为主键或提供一个

CREATE OR REPLACE TRIGGER entity_Id_TRG BEFORE INSERT OR UPDATE ON entity
FOR EACH ROW
BEGIN
  if inserting and :new.attribute_1 is NULL then
  SELECT attribute_1_SEQ.nextval into :new.attribute_1 FROM DUAL;
  end if;

END;