2010-10-19 60 views
2

我刚刚学习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; 
/

但是,在插入语句中如何使用它?只有FirstName和LastName值的插入语句由于“没有足够的值”而失败(顺便说一下,我使用了Toad)。如果必须将EMP_SEQ.NextVal作为插入语句的第一个值,那么触发器的重点是什么?

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

回答

4

可以省略从插入的ID,但是你必须指定目标列:

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

你应该在生产代码中没有没有列表的插入;但是如果你确实可以通过一个NULL的D列:

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

太棒了。这正是我需要知道的。这非常简单,但我无法在Internet或Oracle用户指南中找到任何内容。也许假设人们知道这一点。谢谢。 – 2010-10-19 12:58:30

0

这应该工作,如果不是我会描述可能的原因和用法。

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

而且可以肯定你将能够做到这一点

INSERT INTO EMPLOYEES (EMPLOYEEID , FirstName, LastName) VALUES (null, 'Name', 'LastName') 
相关问题