Как использовать триггер, который получает следующее значение в последовательности - PullRequest
2 голосов
/ 19 октября 2010

Я только изучаю Oracle и понимаю концепцию триггеров и последовательностей. То, что я не могу найти, так это то, как они используются вместе с автоматическим приращением, аналогично настройке SqlServer Identity. В очень простом примере у меня есть таблица с именем Employees, которая имеет три поля (все обязательные): EmployeeID (PK), FirstName, LastName. Я создал последовательность, чтобы получить следующее значение для поля идентификатора. Затем я создал триггер, который выглядит так:

CREATE OR REPLACE TRIGGER MyFirstTrigger
 BEFORE INSERT ON EMPLOYEES  FOR EACH ROW
BEGIN
   Select EMP_SEQ.NextVal into :NEW.EMPLOYEEID from dual;
END MyFirstTrigger;
/

Однако как это используется в операторе вставки? Оператор вставки только со значениями FirstName и LastName не выполняется для «Недостаточно значений» (кстати, я использую Toad). Если мне нужно включить EMP_SEQ.NextVal в качестве первого значения оператора вставки, в чем смысл триггера?

Надеюсь, это имеет смысл. Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 19 октября 2010

Вы можете опустить идентификатор из вставки, но вы должны указать целевые столбцы:

insert into employees (firstname, lastname) values ('Tony', 'Andrews');

В производственном коде не должно быть вставок без списка столбцов;однако, если бы вы это сделали, вы могли бы просто передать NULL для столбца D:

insert into employees values (null, 'Tony', 'Andrews');
0 голосов
/ 19 октября 2010

Это должно работать, если нет, я опишу возможную причину этого и использования.

INSERT INTO EMPLOYEES (FirstName, LastName) VALUES ('Name', 'LastName')

и наверняка Вы сможете сделать это

   INSERT INTO EMPLOYEES (EMPLOYEEID , FirstName, LastName) VALUES (null, 'Name', 'LastName')
...