<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      MySQL存儲過程 游標 出錯處理的示例代碼

      [摘要]MySQL存儲過程 游標 錯誤處理的示例代碼--set_account_data 重新生成用戶編號BEGINDECLARE temp_id INT(8); ...
      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存儲過程 游標 錯誤處理的示例代碼的詳細內容,更多請關注php中文網其它相關文章!


      學習教程快速掌握從入門到精通的SQL知識。




      日韩精品一区二区三区高清