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')
	
相关推荐
NCIN EXPE4 小时前
redis 使用
数据库·redis·缓存
MongoDB 数据平台4 小时前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
极客on之路4 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家4 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE4 小时前
开启mysql的binlog日志
数据库·mysql
yejqvow125 小时前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python
oLLI PILO5 小时前
nacos2.3.0 接入pgsql或其他数据库
数据库
m0_743623925 小时前
HTML怎么创建多语言切换器_HTML语言选择下拉结构【指南】
jvm·数据库·python
pele5 小时前
Angular 表单中基于下拉选择动态启用字段必填校验的完整实现
jvm·数据库·python