mysql程序过程语言procedure、触发器trigger

sql 复制代码
CREATE TABLE `accounts` (
  `a_no` int(11) DEFAULT NULL COMMENT '账户编码',
  `a_name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '账户名称',
  `a_status` int(11) DEFAULT NULL COMMENT '账户状态',
  `a_bal` float DEFAULT NULL COMMENT '账户余额',
  `open_branch` int(11) DEFAULT NULL COMMENT '开户网点编码',
  `open_branch_name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '开户行网点名称',
  `phone_no` int(11) DEFAULT NULL COMMENT '账户移动名称'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into accounts values(1,'test1',1,100,11,'1open',111)
insert into accounts values(3,'test1',1,100,11,'1open',33)
insert into accounts values(2,'test2',1,200,22,'1open',222)
sql 复制代码
CREATE TABLE `branch_sum` (
  `b_no` int(11) DEFAULT NULL COMMENT '网点编码',
  `b_date` date DEFAULT NULL COMMENT '汇总日期',
  `b_name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '网点名称',
  `all_bal` float DEFAULT NULL COMMENT '网点开户行账户余额'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sql 复制代码
CREATE TABLE `trade_details` (
  `t_date` date DEFAULT NULL COMMENT '交易日期',
  `optr_no` int(11) DEFAULT NULL COMMENT '操作员编码',
  `serial_no` int(11) DEFAULT NULL COMMENT '流水号',
  `t_branch` int(11) DEFAULT NULL COMMENT '交易网点编码',
  `a_no` int(11) DEFAULT NULL COMMENT '账户编码',
  `t_type` int(11) DEFAULT NULL COMMENT '交易类型(1、存款 2、取款)',
  `t_amt` float DEFAULT NULL COMMENT '交易金额',
  `t_result` int(11) DEFAULT NULL COMMENT '交易结果(1、成功 2.失败 3.异常 4.已取消)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into trade_details values('2026-02-09',1,123,11,2,1,200,1)
insert into trade_details values('2026-02-09',1,123,11,3,2,200,1)

insert into trade_details values('2026-02-09',1,123,11,1,1,500,1)
insert into trade_details values('2026-02-09',1,123,11,1,2,500,1)

CREATE DEFINER=`root`@`localhost` TRIGGER `BalanceNotice` 
AFTER INSERT ON `trade_details` FOR EACH ROW #when NEW.t_result=1
	Begin
declare v_phone varchar(30);
declare	v_type varchar(30);
declare	v_bal int;
declare	v_msg varchar(300);
	

 select phone_no,a_bal into v_phone,v_bal from accounts where a_no=new.a_no;
 
 if new.t_type=1 then
   set  v_type ='存款';
	 set  v_bal=new.t_amt+v_bal;
	 UPDATE accounts set a_bal=v_bal where a_no=new.a_no;
 end if;
 if new.t_type=2 then
    set v_type ='取款';
		set v_bal=v_bal-new.t_amt;
		UPDATE accounts set a_bal=v_bal where a_no=new.a_no;
 end if;
 
    set v_msg =concat(new.t_date,'你的账户',new.a_no,'上执行了',v_type,'交易,存款金额:',new.t_amt,',账号余额为: ',v_bal);
		insert into log values(v_msg);
end;
sql 复制代码
CREATE TABLE `log` (
  `msg` varchar(300) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sql 复制代码
drop trigger BalanceNotice;
create trigger BalanceNotice
	after insert on trade_details for each row 
	#when NEW.t_result=1
	Begin
declare v_phone varchar(30);
declare	v_type varchar(30);
declare	v_bal int;
declare	v_msg varchar(300);
	
 select phone_no,a_bal into v_phone,v_bal from accounts where a_no=new.a_no;
 
 if new.t_type=1 then
   set  v_type ='存款';
	 set  v_bal=new.t_amt+v_bal;
	 UPDATE accounts set a_bal=v_bal where a_no=new.a_no;
 end if;
 if new.t_type=2 then
    set v_type ='取款';
		set v_bal=v_bal-new.t_amt;
		UPDATE accounts set a_bal=v_bal where a_no=new.a_no;
 end if;
 
    set v_msg =concat(new.t_date,'你的账户',new.a_no,'上执行了',v_type,'交易,存款金额:',new.t_amt,',账号余额为: ',v_bal);
		insert into log values(v_msg);
end
	
sql 复制代码
drop procedure branceBalancesum
create  procedure branceBalancesum(in s_date VARCHAR(20))
Begin
    declare  all_balance int;
    declare	 v_bran_no varchar(10);
    declare	 v_bran_name varchar(30);
    declare	 v_finished int;
    declare c_sum_bal CURSOR FOR   select open_branch,open_branch_name,sum(a_bal) from accounts GROUP BY open_branch,open_branch_name;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;
 
	 open c_sum_bal;
	 process_loop: loop
		    fetch c_sum_bal into  v_bran_no,v_bran_name,all_balance ;
		
		     if v_finished=1 then 
		         LEAVE process_loop;
		     end if ;
		    insert into branch_sum values(v_bran_no,s_date,v_bran_name,all_balance);
		end loop;
		CLOSE c_sum_bal;
		commit;
	END;
	
	call branceBalancesum('2025-02-07')
	
相关推荐
wangchunyu11417 分钟前
PostgreSQL 入门与实践:从零搭建一个 CRUD 应用
数据库·postgresql
涛思数据(TDengine)18 分钟前
从_找根因_到_搭系统_:工业 AI 实战直播(十、十一期)
大数据·数据库·人工智能·时序数据库·tdengine
qq_339191141 小时前
mysql磁盘占用排查,mysql存储空间占比统计,mysql判断哪张表占用磁盘空间大
数据库·mysql
东方护航数据恢复(深圳)1 小时前
SSD主控损坏后的芯片级提取:FTL映射表重建与NAND直读
大数据·数据库
光锥智能2 小时前
OceanBase领跑数字政府数据库选型:产品能力、市场潜力、技术潜力均居首
数据库·人工智能·oceanbase
风哥2号2 小时前
达梦DM数据库恢复工具FGDDU(FGEDU DM DUL)
数据库·达梦数据库·数据库恢复
2601_960017623 小时前
啤酒行业PLM突围战:一半科技以配方与工艺数字化重构酿造食品研发体系
数据库·科技·重构
GIS数据转换器3 小时前
智慧林草“一张图“平台
java·大数据·服务器·前端·javascript·数据库·人工智能
gis开发之家3 小时前
Spring Boot 4 深度解析,JdbcTemplate 实战——轻量级数据库操作方案
java·数据库·spring boot·后端