Как использовать триггер, который получает следующее значение в последовательности
Я просто изучаю 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 ответа:
Вы можете опустить идентификатор из вставки, но вы должны указать целевые столбцы:
insert into employees (firstname, lastname) values ('Tony', 'Andrews');
У вас не должно быть вставок без списка столбцов в производственном коде; однако если бы вы это сделали, вы могли бы просто передать NULL для столбца D:
insert into employees values (null, 'Tony', 'Andrews');