--set_account_data 重新生成用戶編號 BEGIN DECLARE temp_id INT(8); /*用戶id*/ DECLARE temp_manager INT(8); /*上級id*/ DECLARE temp_accounter_no VARCHAR(64); /*上級編碼 ...
--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