SQL 由于 'invalid trigger specification',触发器无法正常工作

SQL Trigger is not working properly because of 'invalid trigger specification'

我正在开发一个名为 Employees 的 table,其中存储 first_namelast_name(作为 varchar)。我创建了下面的触发器来检查名字和姓氏的组合是否已经存在:

CREATE OR REPLACE TRIGGER VALIDATE_NAME 
BEFORE INSERT ON EMPLOYEES 
IF (SELECT count(*) FROM employees 
     WHERE firs_name = new.first_name AND LAST_NAME = new.last_name) = 0
  BEGIN
  END
ELSE IF (SELECT count(*) FROM employees
          WHERE firs_name = new.first_name AND LAST_NAME = new.last_name) >= 1
  BEGIN
    RETURN FALSE;
  END;

但是我收到一条错误消息 Invalid trigger specification,我不明白。有人可以澄清我做错了什么吗?我已经删除了第一个 BEGIN/END 的内容,因为它只是像它应该的那样存储新信息。

P.S.: 这是一个理论案例研究,我知道检查重复条目的正确方法是不使用名字和姓氏,因为两个人可能有相同的名字。我知道,所以请不要开始 :-)

您当前形式的触发器没有多大意义。触发器不是函数,因此您不能 return 从中获取值。

此外,您的触发器不是行级触发器,而是语句级触发器,因此您无法引用新值(因为您的触发器每 语句触发一次 , 不是每个 row) - 行级触发器必须声明为 FOR EACH ROW.

确保唯一性的正确方法不是触发器,而是 UNIQUE 约束(参见 AskTom on using triggers):

ALTER TABLE employees ADD CONSTRAINT employees_name_uq UNIQUE(firstname, lastname);