Rumah pangkalan data tutorial mysql MySQL存储过程 游标 错误处理的示例代码

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

Sep 19, 2017 am 11:04 AM
mysql kursor kesilapan


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
Salin selepas log masuk

Atas ialah kandungan terperinci MySQL存储过程 游标 错误处理的示例代码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penyelesaian kepada ralat segera Windows Update Ralat 0x8024401c Penyelesaian kepada ralat segera Windows Update Ralat 0x8024401c Jun 08, 2024 pm 12:18 PM

Penyelesaian kepada ralat segera Windows Update Ralat 0x8024401c

Kemahiran pemprosesan struktur data besar PHP Kemahiran pemprosesan struktur data besar PHP May 08, 2024 am 10:24 AM

Kemahiran pemprosesan struktur data besar PHP

Bagaimana untuk mengoptimumkan prestasi pertanyaan MySQL dalam PHP? Bagaimana untuk mengoptimumkan prestasi pertanyaan MySQL dalam PHP? Jun 03, 2024 pm 08:11 PM

Bagaimana untuk mengoptimumkan prestasi pertanyaan MySQL dalam PHP?

Bagaimana untuk menggunakan sandaran dan pemulihan MySQL dalam PHP? Bagaimana untuk menggunakan sandaran dan pemulihan MySQL dalam PHP? Jun 03, 2024 pm 12:19 PM

Bagaimana untuk menggunakan sandaran dan pemulihan MySQL dalam PHP?

Bagaimana untuk memasukkan data ke dalam jadual MySQL menggunakan PHP? Bagaimana untuk memasukkan data ke dalam jadual MySQL menggunakan PHP? Jun 02, 2024 pm 02:26 PM

Bagaimana untuk memasukkan data ke dalam jadual MySQL menggunakan PHP?

Apakah senario aplikasi jenis penghitungan Java dalam pangkalan data? Apakah senario aplikasi jenis penghitungan Java dalam pangkalan data? May 05, 2024 am 09:06 AM

Apakah senario aplikasi jenis penghitungan Java dalam pangkalan data?

Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4 Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4 Dec 09, 2024 am 11:42 AM

Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4

Bagaimana untuk menggunakan prosedur tersimpan MySQL dalam PHP? Bagaimana untuk menggunakan prosedur tersimpan MySQL dalam PHP? Jun 02, 2024 pm 02:13 PM

Bagaimana untuk menggunakan prosedur tersimpan MySQL dalam PHP?

See all articles