我在寒假有几个大学作业,其中一个是在表上创建触发器:
PERSON(ID, Name, Surname, Age);
触发器应该在用户插入具有无效ID的行时通知用户。有效性标准是ID长度为11位。
我尝试编写如下解决方案:
CREATE OR REPLACE TRIGGER person_id_trigg
AFTER INSERT
ON person
DECLARE
idNew VARCHAR(50);
lengthException EXCEPTION;
BEGIN
SELECT id INTO idNew FROM INSERTED;
IF LENGTH(idNew) <> 11 THEN
RAISE lengthException;
END IF;
EXCEPTION
WHEN lengthException THEN
dbms_output.put_line('ID for new person is INVALID. It must be 11 digits long!');
END;
然后我意识到INSERTED只存在于SQL Server中,而不是Oracle。
我该怎么办才能解决这个问题呢?
BEFORE INSERT
,而不是AFTER INSERT
。使用FOR EACH ROW
子句。不要执行任何查询,只需检查new.id
。阅读此链接以获取详细信息,其中有许多示例:http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/triggers.htm#LNPLS020 - krokodilko