Как использовать триггер, который получает следующее значение в последовательности


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

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

Однако, как это это используется в инструкции insert? Инструкция insert, содержащая только значения FirstName и LastName, завершается ошибкой "недостаточно значений" (кстати, я использую Toad). Если мне придется включить EMP_SEQ.NextVal как первое значение инструкции insert, в чем смысл триггера?

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

2 2

2 ответа:

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

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

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

insert into employees values (null, 'Tony', 'Andrews');

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

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

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

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