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')
	
相关推荐
小高不会迪斯科10 小时前
CMU 15445学习心得(二) 内存管理及数据移动--数据库系统如何玩转内存
数据库·oracle
e***89011 小时前
MySQL 8.0版本JDBC驱动Jar包
数据库·mysql·jar
l1t11 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
失忆爆表症12 小时前
03_数据库配置指南:PostgreSQL 17 + pgvector 向量存储
数据库·postgresql
AI_567812 小时前
Excel数据透视表提速:Power Query预处理百万数据
数据库·excel
SQL必知必会13 小时前
SQL 窗口帧:ROWS vs RANGE 深度解析
数据库·sql·性能优化
Gauss松鼠会13 小时前
【GaussDB】GaussDB数据库开发设计之JDBC高可用性
数据库·数据库开发·gaussdb
+VX:Fegn089514 小时前
计算机毕业设计|基于springboot + vue鲜花商城系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
识君啊14 小时前
SpringBoot 事务管理解析 - @Transactional 的正确用法与常见坑
java·数据库·spring boot·后端
一个天蝎座 白勺 程序猿14 小时前
破译JSON密码:KingbaseES全场景JSON数据处理实战指南
数据库·sql·json·kingbasees·金仓数据库