【发布时间】:2014-01-20 11:22:49
【问题描述】:
各位程序员大家好,祝大家新年快乐!
寒假我的大学任务很少,其中之一是在桌子上创建触发器:
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只存在于sqlserver中而不存在于oracle中。
你会建议我做些什么来解决这个问题?
提前致谢!
【问题讨论】:
-
使用
BEFORE INSERT,而不是AFTER INSERT。使用FOR EACH ROW子句。不要执行任何查询,只需检查new.id。阅读此链接了解详细信息,那里有很多示例:docs.oracle.com/cd/B28359_01/appdev.111/b28370/… -
感谢您的输入,显然我需要阅读此文档以了解触发器。