我是 SQL 新手,我正在尝试找出触发器。我需要编写一个涉及 3 个表的触发器,不用担心它仅由其中一个表触发...
CREATE TABLE CUSTOMERS
(CUSTID CHAR(8) constraint customers_pk primary key,
CREDITSCORE NUMBER(5,2)
CREATE TABLE LOANDETAILS
(LOANNO VARCHAR2(11) primary key,
CUSTID CHAR(8),
LOANSTATUSCODE NUMBER(3,0),
RATE NUMBER(5,2),
CREATE TABLE SCORECONVERSIONCHART
(SCOREBAND VARCHAR2(1) constraint scorecc_pk primary key,
MINSCORE NUMBER(3,0),
MAXSCORE NUMBER(3,0),
BASERATEADJUSTMENT NUMBER(4,2)
);
因此,当更新客户表中的信用评分 (creditscore) 时,我想查看贷款详细信息表中的贷款类型 (LOANTYPE)。如果贷款类型是 1 或 2,我想更新贷款详细信息表中的贷款利率。通过查看分数转换表中自定义信用分数下降的位置(客户表中的信用分数)来更新贷款利率 - 如果它落在转换表中给定的最小和最大分数之间,则将适当的 baserateadjustment 添加到 base 3% 的比率。
我不清楚如何让所有这些表在触发器中进行交互,
如果有人能用通俗的语言帮助我或为我指出一个很好的资源,我将不胜感激。
以下示例可能会为您提供一个起点。
此触发器将有条件地更新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
Edit最初的例子假设每个客户只有一笔贷款。更新以处理每个客户的多笔贷款。
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
然后更新信用评分。Frodo 的贷款更改(他的贷款类型符合条件)为 3% + 3% 的 scoreconversionchart 调整,但 Chewie 的贷款根本不动。
UPDATE CUSTOMERS SET CREDITSCORE = 600;
SELECT CUSTID, LOANTYPE, RATE FROM LOANDETAILS;
CUSTID LOANTYPE RATE
00000000 1 6
00000001 3 4.2
如果贷款类型是数字,我建议将它们记录为数字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句