Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sử dụng con trỏ trong một vòng lặp của một thủ tục được lưu trữ

Bạn có thể làm những gì bạn muốn bằng cách lồng con trỏ vào BEGIN ... END khối. Xem "Lồng vòng lặp con trỏ MySQL" của Roland Bouman để biết thêm chi tiết. Có thể cần lưu ý nhận xét của anh ấy về kỹ thuật này thường là không cần thiết, vì thường có thể viết lại truy vấn thay vì phải thực hiện một con trỏ lồng nhau.

Nếu bạn vẫn cần lồng con trỏ của mình trong một vòng lặp, mã của bạn sẽ trông giống như sau:

increment: LOOP
    block_cursor: BEGIN
        DECLARE cur1 CURSOR FOR SELECT person_id, publication_id  FROM p_publication WHERE person_id = new_count;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
        OPEN cur1;
        REPEAT
            FETCH cur1 INTO pub_id, per_id;
            IF NOT done THEN
                INSERT INTO test.t2 VALUES (pub_id, per_id);
            END IF;
            SET new_count = new_count + 1;
        UNTIL done END REPEAT;
        CLOSE cur1;
        IF !(new_count < old_count ) THEN
            LEAVE increment;
        END IF;
    END block_cursor;
END LOOP increment;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiệu suất tốt nhất để Lấy kết quả MySQL EAV dưới dạng Bảng quan hệ là gì

  2. Ví dụ về CURTIME () - MySQL

  3. Percona Live Dublin - Tóm tắt sự kiện và các phiên của chúng tôi

  4. laravel sắp xếp hùng hồn theo mối quan hệ

  5. Tệp khóa MySQL không chính xác cho bảng tmp khi thực hiện nhiều phép nối