2015-11-10 4 views
0

Я пытаюсь создать синтетический ключ с последовательностью (attribute_1). Я не уверен, что мой код работает правильно, так как я впервые сделал что-то подобное. Я просто ищу общие указатели или советы о том, что я делаю.oracle trigger синтетический ключ

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

Ваш код выглядит разумным мне. Это работает? –

+0

Какую версию Oracle вы используете? – nop77svk

ответ

1

Ваш триггер будет работать, но что, если вы хотите предоставить идентификационный номер? Некоторые приложения будут вставляться в родительский элемент и использовать идентификатор в качестве внешнего ключа для дочерних таблиц. В этом случае вы можете сразу вызвать последовательность, чтобы вы могли ее повторно использовать.

Этот триггер позволит вам либо вставить нуль в качестве первичного ключа или поставить один

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;