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('17­Feb­07', 'DD­MON­YY')); 

它给了我所谓的错误 - “ORA-20001:警告:将进目击...”(我想它) ‘ORA-06512:在第7行’ ‘ORA-04088:触发器执行’

然后插入到功能表中的错误并没有出现,当我测试它。请帮忙。

作为每文档上raise_application_error

当被调用时,RAISE_APPLICATION_ERROR结束子程序,并返回一个用户定义的错误数和消息发送到应用。错误号和消息可能会像任何Oracle错误一样陷入困境。

所以,先做另一个插入,然后引发错误。但是,如果在触发器中引发未处理的错误,则会回滚整个事务,并使用它修改任何数据,触发器将会出错。您可能需要考虑以不同的方式向用户返回消息。

+0

移动插入部分在提出错误之后仍然出现错误 – tedkim20

+0

是错误信息分类还是只是期望我使用我的思维阅读技能? – Shadow

+0

同样的错误,ORA-06512:在第9行和ORA-04088:在执行触发器期间出错。 – tedkim20