oracle 触发器合成密钥
oracle trigger synthetic key
我正在尝试创建一个带有序列 (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;
/
您的触发器可以使用,但如果您要提供 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;
我正在尝试创建一个带有序列 (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;
/
您的触发器可以使用,但如果您要提供 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;