MySQL 存储过程简单demo

一、基础数据保存在以下两张表中

1、要校验的记录表

CREATE TABLE `record` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户 ID',
  `MEMBER_ID` bigint(20) DEFAULT '10000' COMMENT '会员编号',
  `AAA_COUNT` bigint(10) DEFAULT NULL COMMENT 'AAA 数量',
  `BBB_COUNT` bigint(10) DEFAULT NULL COMMENT 'BBB 数量',
  `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、校验后的结果表 

CREATE TABLE `policy_result` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `MEMBER_ID` bigint(20) NOT NULL COMMENT '会员编号',
  `RULE_CODE` varchar(32) DEFAULT NULL COMMENT '命中规则代码',
  `DETAIL_MESSAGE` varchar(512) DEFAULT NULL COMMENT '具体原因',
  `COMPANY` varchar(32) DEFAULT NULL COMMENT '哪个资信局',
  `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='申请命中策略表';

二、存储过程

BEGIN
-- aaa 数量
DECLARE aaaCount INT DEFAULT 0;

-- bbb 数量
DECLARE bbbCount INT DEFAULT 0;

-- 临时变量
DECLARE count INT DEFAULT 0;

-- 固定变量
DECLARE company VARCHAR (64) DEFAULT 'HELLO';

-- 去掉update安全模式
SET SQL_SAFE_UPDATES = 0;


hello_verify_count : BEGIN

	-- 查询record主表
	SELECT count(*) INTO count FROM record WHERE member_id = memberId;

	-- 如果成功只有一条数据,则开始校验规则
	IF count IS NOT NULL AND count >= 1 THEN


		SELECT aaa_count, bbb_count INTO aaaCount, bbbCount FROM	record

			WHERE	member_id = memberId	ORDER BY	create_time DESC	LIMIT 1;


		IF aaaCount >= 10 THEN

			SET resultCode = 'F1';

			SET resultReason = concat('AAA COUNT 大于等于10, 实际COUNT ',	aaaCount);

			INSERT INTO policy_result (	member_id, rule_code,	detail_message,	company	)

				VALUES ( memberId,	resultCode,	resultReason,	company	);

		END IF;


		IF bbbCount >= 10 THEN

			SET resultCode = 'F2';

			SET resultReason = concat('BBB COUNT 大于等于10, 实际COUNT ',	bbbCount);

			INSERT INTO policy_result (	member_id, rule_code,	detail_message,	company	)

				VALUES ( memberId,	resultCode,	resultReason,	company	);

		END IF;


	END IF;


END hello_verify_count;


END

三、存储过程传入的参数,以及返回的参数 

IN `memberId` varchar(128),OUT `resultCode` varchar(64),OUT `resultReason` varchar(128)

四、执行存储过程,获得返回结果 

-- 参数
-- IN `memberId` varchar(128),OUT `resultCode` varchar(64),OUT `resultReason` varchar(128)
-- 数据库名.存储过程名 (memberId, resultCode, resultReason)
CALL boot.hello (10000 ,@resultCode ,@resultReason);

SELECT
	@resultCode,
	@resultReason;

猜你喜欢

转载自my.oschina.net/AmosWang/blog/1625503