我只是在学习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语句的第一个值,那么触发器的重点是什么?
希望这是有道理的。提前谢谢。
答案 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')