如果未付余额超过50美元,则触发不允许会员租借

时间:2014-11-24 20:35:05

标签: sql database oracle triggers

我想创建一个触发器,以便在成员未付余额超过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;

1 个答案:

答案 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);