【2023.10.25练习】数据库-存储过程

任务描述

本关任务:编写存储过程pro_1完成还款操作。

输入参数

银行代码、法人代码、借款日期、借款金额、借款期限。

处理

判断输入参数所对应的贷款是否已还款。

  • 如果该笔贷款已还清,则不进行任何操作;
  • 如果该笔贷款尚未还清,则进行还款操作。将还款日期更新为系统当前日期,修改let、bankt表所对应的eamount和bamount值,将本笔贷款的金额从未还清总额中减去。

涉及的表和字段

银行表(bankt): 银行代码(bno)char(12) 银行名称(bname)varchar(100)

电话(tel)varchar(20) 未还清贷款总额(bamount)int

法人表(let): 法人代码(eno)char(7) 法人名称(ename)varchar(20)

经济性质(enature)varchar(20) 注册资金(ecapital)int 未还清贷款总额(eamount)int

贷款表(loant): 银行代码(bno)char(12) 法人代码(eno)char(7) 贷款日期(lsdate)date

贷款金额(lamount)int 贷款期限(lterm)int 还款日期(ledate)date

编程要求

在代码文件“step1/query1.sql”中实现存储过程pro_1; 在代码文件“step1/query2.sql”中实现对存储过程的调用。


设计重点:

为了判断贷款是否已经还款,需要使用变量。声明变量的时候记得声明类型

声明存储过程之前记得DELIMITER $$以及在END$$以后DELIMITER ; 

调用存储过程使用CALL


最终代码:

PART1: query1.sql

use BANKDB;

delimiter $$
#请在此处添加存储过程实现代码
#请注意参数顺序需要与题目要求一致
########## Begin ##########

CREATE PROCEDURE pro_1(in v_bno char(12), in v_eno char(7),in v_isdate date, in v_lamount integer, in v_lterm integer)
BEGIN

DECLARE flag integer; /*声明变量时记得加类型*/
SELECT COUNT(*) INTO flag /*COUNT表示该法人未还款的贷款表数量*/
FROM loant
WHERE bno = v_bno AND eno = v_eno AND ledate IS NULL;

IF flag > 0 THEN
   UPDATE bankt
   SET bamount = CASE
      WHEN bamount=0 THEN 0
      ELSE bamount - v_lamount
   END
   WHERE bno = v_bno;
   
   UPDATE let
   SET eamount = CASE
      WHEN eamount = 0 THEN 0 
      ELSE eamount - v_lamount
   END
   WHERE eno = v_eno;

   UPDATE loant
   SET ledate = v_isdate
   WHERE bno = v_bno AND eno = v_eno;

   END IF;

   


END$$

########## End ##########  
delimiter ; #恢复分号来作为语句标识。

PART2:query2.sql

use BANKDB;

#请在此处添加存储过程调用代码
#实参值为
#银行代码:103100009146
#法人代码:M052019
#借款日期:2014-06-11
#借款金额:96
#借款期限:16
########## Begin ##########

call pro_1('103100009146','M052019','2014-06-11',96,16);/*调用函数*/


########## End ########## 

总结:掌握声明数据库变量和使用存储过程。

你可能感兴趣的:(练习日志,数据库,sql)