如何使用获取序列中下一个值的触发器

时间:2010-10-19 12:44:17

标签: oracle10g triggers sequences toad

我只是在学习Oracle,我理解触发器和序列的概念。我似乎无法找到它们是如何以类似于SqlServer Identity设置的自动增量方式一起使用的。在一个非常简单的例子中,我有一个名为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语句中使用它?只有FirstName和LastName值的insert语句因“Not enough values”而失败(顺便说一下,我使用的是Toad)。如果我必须包含EMP_SEQ.NextVal作为insert语句的第一个值,那么触发器的重点是什么?

希望这是有道理的。提前谢谢。

2 个答案:

答案 0 :(得分:4)

您可以省略插入中的ID,但必须指定目标列:

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

您不应该在生产代码中没有列列表的插入;但是,如果你这样做,你可以为D列传递一个NULL:

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

答案 1 :(得分:0)

如果没有,我应该说明这个和使用的可能原因。

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

并且肯定你可以这样做

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