最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL存储过程游标错误处理的示例代码

来源:懂视网 责编:小采 时间:2020-11-09 08:46:47
文档

MySQL存储过程游标错误处理的示例代码

MySQL存储过程游标错误处理的示例代码:MySQL存储过程 游标 错误处理的示例代码--set_account_data 重新生成用户编号 BEGIN DECLARE temp_id INT(8); /*用户id*/ DECLARE temp_manager INT(8); /*上级id*/ DECLARE temp_accounter_no VARCHAR(64); /
推荐度:
导读MySQL存储过程游标错误处理的示例代码:MySQL存储过程 游标 错误处理的示例代码--set_account_data 重新生成用户编号 BEGIN DECLARE temp_id INT(8); /*用户id*/ DECLARE temp_manager INT(8); /*上级id*/ DECLARE temp_accounter_no VARCHAR(64); /

MySQL存储过程 游标 错误处理的示例代码

--set_account_data 重新生成用户编号

BEGIN
 DECLARE temp_id INT(8); /*用户id*/
 DECLARE temp_manager INT(8); /*上级id*/
 DECLARE temp_accounter_no VARCHAR(64); /*上级编码*/
 DECLARE temp_max_no VARCHAR(64); /*上级的最大下级编码*/
 DECLARE max_no VARCHAR(64); /*编码*/
 DECLARE str1 VARCHAR(64); /*编码*/
 DECLARE temp_no INT(8); /*编码*/
 DECLARE temp_level INT(8); /*级次*/
 DECLARE state VARCHAR(30); /*错误处理监听变量*/

 /*定义用户表游标*/
 DECLARE account_cursor CURSOR FOR SELECT id,manager FROM account ORDER BY manager,id;

 /*定义错误处理监听,用于结束游标循环*/
 DECLARE CONTINUE HANDLER FOR 1329
 BEGIN
 SET state = 'error';
 END; 

 OPEN account_cursor;
 REPEAT
 FETCH account_cursor INTO temp_id,temp_manager;
 IF (temp_id = 1) THEN
 UPDATE account SET leaf = 0,no = '01',level = 1 WHERE id = 1;
 ELSE
 /*设置上级leaf为0*/
 UPDATE account SET leaf = 0 WHERE id = temp_manager;
 /*查询上级编号*/
 SELECT no INTO temp_accounter_no FROM account WHERE id = temp_manager;
 /*设置上级编码*/
 UPDATE account SET pno = temp_accounter_no WHERE id = temp_id;
 /*查询上级原有的最大下级编码*/
 SELECT MAX(no) INTO temp_max_no FROM account WHERE pno = temp_accounter_no;
 /*如果最大下级编码为空,生成新的编码,否则把原来的编码加一*/
 IF (temp_max_no IS NULL) THEN
 SET max_no = concat(temp_accounter_no, '0001');
 ELSE 
 SET str1 = SUBSTR(temp_max_no,LENGTH(temp_max_no)-3,4);
 SET temp_no = str1;
 SET temp_no = temp_no + 1;
 SET str1 = temp_no;
 IF (LENGTH(str1) = 1) THEN
 SET str1 = concat('000', str1);
 ELSEIF (LENGTH(str1) = 2) THEN
 SET str1 = concat('00', str1);
 ELSEIF (LENGTH(str1) = 3) THEN
 SET str1 = concat('0', str1); 
 END IF;
 SET max_no = concat(temp_accounter_no, str1);
 END IF;
 UPDATE account SET no = max_no WHERE id = temp_id;
 SET temp_level = (LENGTH(max_no) + 2) / 4;
 UPDATE account SET level = temp_level WHERE id = temp_id;
 END IF;
 UNTIL state = 'error'
 END REPEAT;
 CLOSE account_cursor;
 /*修改leaf为null的为1*/
 UPDATE account SET leaf = 1 WHERE leaf IS NULL;
 RETURN 0;
END

文档

MySQL存储过程游标错误处理的示例代码

MySQL存储过程游标错误处理的示例代码:MySQL存储过程 游标 错误处理的示例代码--set_account_data 重新生成用户编号 BEGIN DECLARE temp_id INT(8); /*用户id*/ DECLARE temp_manager INT(8); /*上级id*/ DECLARE temp_accounter_no VARCHAR(64); /
推荐度:
标签: 处理 错误 代码
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top