由于“触发器规范无效”,SQL触发器无法正常工作

时间:2015-05-18 10:58:19

标签: sql oracle triggers

我正在处理一个名为Employees的表,其中存储了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。:这是一个理论案例研究,我知道检查重复条目的正确方法是不使用名字和姓氏,因为两个人可能共用同一个名字。我知道,所以请不要开始: - )

1 个答案:

答案 0 :(得分:1)

您当前形式的触发器没有多大意义。触发器不是函数,因此您无法从中返回值。

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

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

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