我正在处理一个名为Employees
的表,其中存储了first_name
和last_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。:这是一个理论案例研究,我知道检查重复条目的正确方法是不使用名字和姓氏,因为两个人可能共用同一个名字。我知道,所以请不要开始: - )
答案 0 :(得分:1)
您当前形式的触发器没有多大意义。触发器不是函数,因此您无法从中返回值。
此外,您的触发器不是行级触发器,而是语句级触发器,因此您无法引用新值(因为每个语句触发器触发一次,而不是每个 > row ) - 必须将行级触发器声明为FOR EACH ROW
。
确保唯一性的正确方法不是触发器,而是UNIQUE约束(参见AskTom on using triggers):
ALTER TABLE employees ADD CONSTRAINT employees_name_uq UNIQUE(firstname, lastname);