我正在尝试使用序列(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;
/
答案 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;