我有几个寒假的大学任务,其中之一是在table上创建触发器:
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中。
我能做些什么来弥补呢?
1条答案
按热度按时间ar5n3qh51#
你想引发一个异常(这将阻止插入成功)吗?或者你想允许插入成功并向
dbms_output
缓冲区写入一个字符串,该字符串可能存在也可能不存在,可能不显示给运行插入的人?无论哪种情况,您都希望这是一个行级触发器,而不是语句级触发器,因此您需要添加
for each row
子句。如果要引发异常
如果您希望潜在地打印输出,但允许
insert
成功当然,在现实中,你永远不会使用触发器来做这类事情,在现实世界中,你会使用约束。