ORACLE PL/SQL触发器编程问题
问题描述:
您好我运行使用ORACLE PL/SQL编程创建的触发器时出现问题。基本上,只要插入的数据库中不存在位置,我就必须在FEATURES表中插入一个新的元组。这里的触发 -ORACLE PL/SQL触发器编程问题
CREATE OR REPLACE TRIGGER sightTrigger
AFTER INSERT
ON SIGHTINGS
FOR EACH ROW
DECLARE
x INTEGER;
BEGIN
SELECT COUNT(*)INTO x
FROM FEATURES
WHERE FEATURES.location = :NEW.location;
IF(x=0) THEN
RAISE APPLICATION ERROR(-20001, 'Warning: Insert into the SIGHTINGS ...');
INSERT INTO FEATUERS(LOCATION,CLASS,LATITUDE<LONGITUDE,MAP,ELEV)
VALUES(:NEW.location, 'UNKNOWN', null, null, null, null);
END IF;
END sightTrigger;
它编译罚款,但我跑了一个简单的查询,以测试它 -
INSERT INTO SIGHTINGS VALUES ('Douglas dustymaiden', 'Person A', 'Piute', TO_DATE('17Feb07', 'DDMONYY'));
它给了我所谓的错误 - “ORA-20001:警告:将进目击...”(我想它) ‘ORA-06512:在第7行’ ‘ORA-04088:触发器执行’
然后插入到功能表中的错误并没有出现,当我测试它。请帮忙。
答
作为每文档上raise_application_error:
当被调用时,RAISE_APPLICATION_ERROR结束子程序,并返回一个用户定义的错误数和消息发送到应用。错误号和消息可能会像任何Oracle错误一样陷入困境。
所以,先做另一个插入,然后引发错误。但是,如果在触发器中引发未处理的错误,则会回滚整个事务,并使用它修改任何数据,触发器将会出错。您可能需要考虑以不同的方式向用户返回消息。
移动插入部分在提出错误之后仍然出现错误 – tedkim20
是错误信息分类还是只是期望我使用我的思维阅读技能? – Shadow
同样的错误,ORA-06512:在第9行和ORA-04088:在执行触发器期间出错。 – tedkim20