以下示例可能会为您提供一个开始位置。
如果贷款类型属于可调整类型,则此触发器将有条件地更新LOANDETAILS
,仅在信用分数更新后,通过SCORECONVERSIONCHART
转换。
首先,添加一些测试数据:
INSERT INTO CUSTOMERS VALUES ('00000000','Frodo','Baggins',null,null,null,'[email protected]',123,750);
INSERT INTO CUSTOMERS VALUES ('00000001','Chewbacca','?',null,null,null,'[email protected]',456,775);
INSERT INTO LOANDETAILS VALUES ('A',NULL,'00000000','1',NULL,NULL,7.2,NULL,NULL);
INSERT INTO LOANDETAILS VALUES ('B',NULL,'00000001','3',NULL,NULL,4.2,NULL,NULL);
INSERT INTO SCORECONVERSIONCHART VALUES ('X',500,599,22);
INSERT INTO SCORECONVERSIONCHART VALUES ('Y',600,699,3);
INSERT INTO SCORECONVERSIONCHART VALUES ('Z',700,799,1);
COMMIT;
然后创建TRIGGER
编辑假定原来的例子有每个客户只有一个贷款。更新后处理每个客户的多笔贷款。
CREATE OR REPLACE TRIGGER Q2
AFTER UPDATE OF CREDITSCORE
ON CUSTOMERS
FOR EACH ROW
DECLARE
V_LOAN_TYPE NUMBER;
BEGIN
UPDATE LOANDETAILS
SET RATE = (SELECT SCORECONVERSIONCHART.BASERATEADJUSTMENT + 3
FROM SCORECONVERSIONCHART
WHERE :NEW.CREDITSCORE BETWEEN SCORECONVERSIONCHART.MINSCORE
AND SCORECONVERSIONCHART.MAXSCORE)
WHERE LOANDETAILS.CUSTID = :NEW.CUSTID
AND LOANDETAILS.LOANTYPE IN ('1','2');
END;
/
然后,测试它:
SELECT CUSTID, LOANTYPE, RATE FROM LOANDETAILS;
CUSTID LOANTYPE RATE
00000000 1 7.2
00000001 3 4.2
然后,更新非信用得分属性:
UPDATE CUSTOMERS SET STATE = 'WI';
SELECT CUSTID, LOANTYPE, RATE FROM LOANDETAILS;
CUSTID LOANTYPE RATE
00000000 1 7.2
00000001 3 4.2
然后更新信用分数。佛罗多的贷款变化(他的贷款类型是合格的)至3%+分数转换图调整为3%,但Chewie's根本不动。
UPDATE CUSTOMERS SET CREDITSCORE = 600;
SELECT CUSTID, LOANTYPE, RATE FROM LOANDETAILS;
CUSTID LOANTYPE RATE
00000000 1 6
00000001 3 4.2
如果贷款类型是数字,我建议将它们记录为数字。
你对上述代码有什么问题? –