代码之家  ›  专栏  ›  技术社区  ›  Matt M

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

  •  2
  • Matt M  · 技术社区  · 15 年前

    我只是在学习甲骨文,我了解触发器和序列的概念。我似乎找不到它们是如何以类似于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语句中使用它?一个只有FirstName和LastName值的insert语句会因为“值不够”而失败(顺便说一下,我使用的是Toad)。如果必须将EMP_SEQ.NextVal作为insert语句的第一个值,那么触发器的作用是什么?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Tony Andrews    15 年前

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

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

    insert into employees values (null, 'Tony', 'Andrews');
    
        2
  •  0
  •   Damian Leszczyński - Vash    15 年前

    如果不行的话,我将描述可能的原因和用法。

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

    你一定能做到

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