2

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

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

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

4

2 回答 2

4

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

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

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

insert into employees values (null, 'Tony', 'Andrews');
于 2010-10-19T12:51:28.087 回答
0

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

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

你肯定能做到这一点

   INSERT INTO EMPLOYEES (EMPLOYEEID , FirstName, LastName) VALUES (null, 'Name', 'LastName')
于 2010-10-19T12:51:05.037 回答