如果使用触发器满足某一条件,则我试图防止插入行。我使用用户定义的异常来执行此操作,但是尽管抛出了异常,该行仍在插入。我不知道为什么会发生这种情况,我认为当异常被引发时,事务被回滚,不会插入任何内容。代码在下面。
create or replace TRIGGER
CHECK_OPTION
BEFORE INSERT
ON lot_options
FOR EACH ROW
DECLARE
v_allowed_stage NUMBER;
v_actual_completion_date DATE;
option_change_invalid EXCEPTION;
BEGIN
DBMS_OUTPUT.PUT_LINE('Starting the begin');
SELECT stage_stage INTO v_allowed_stage
FROM "TEAM3"."Option" o
WHERE o.option_number = :new.option_number;
DBMS_OUTPUT.PUT_LINE(v_allowed_stage);
DBMS_OUTPUT.PUT('Stage in a cell');
SELECT actual_completion INTO v_actual_completion_date
FROM progress
WHERE stage_stage = v_allowed_stage
AND Lot_lot_number = :new.lot_lot_number;
DBMS_OUTPUT.PUT_LINE('completion date in storage');
IF (v_actual_completion_date IS NOT NULL)
--DBMS_OUTPUT.PUT('condition holds true')
THEN RAISE option_change_invalid;
END IF;
EXCEPTION
WHEN option_change_invalid THEN
DBMS_OUTPUT.PUT_LINE('Invalid Option Change: Option change is not allowed in this stage of progress.');
END;发布于 2015-07-14 21:50:45
删除异常块,以便不再捕获错误。然后,该错误将传播出去,并防止和防止插入发生。
https://dba.stackexchange.com/questions/84201
复制相似问题