我想创建一个触发器,以便在成员未付余额超过50时不允许出租。 在底部,我有2次尝试解决这个问题。但是当我为Mike Vick插入数据时,它不会引发应用程序错误。迈克维克斯未付的余额罚款是55美元所以它应该绊倒国旗。
INSERT INTO Transaction
VALUES ('6','Mem101','V104','C1', '14-Nov-14', '16-Nov-14', 'R101');
我该怎么做才能解决这个问题?谢谢!
--Trigger #3
--Attempt #1
CREATE or Replace Trigger Unpaid_Balance_Rule
BEFORE INSERT ON Member
FOR EACH ROW
BEGIN
IF :new.Unpaid_Bal > 50 THEN
RAISE_APPLICATION_ERROR(-20003, 'Balances exceeds 50 dollars, please pay dues before renting');
END IF;
END;
/
show errors;
--Attempt #2
Create or Replace Trigger UnpaidBal_50_Rule
Before insert on Member
For Each Row
Begin
Select Mem_num into OverBalance from Member where unpaid_bal > 50;
IF (:new.Mem_num = OverBalance )
THEN raise_application_error ( -20003, 'Balances exceeds 50 dollars, please pay dues before renting');
END IF;
end;
/
show error;
答案 0 :(得分:1)
由于您在插入数据之前尝试查询表成员
,因此您的尝试2将无效您的尝试1应该有效,但在数字列中插入数字而不是依赖隐式转换总是好的
因此请尝试以下
--Insert for Member Table
INSERT INTO Member
VALUES ('Mem101','Mike Vick','Atlanta','320-274-3179',to_date('14-Oct-12','dd-mon-yyyy'),55);