CON TRỎ MySQL CHO LOOP

Bạn thường nên chấm dứt vòng lặp con trỏ khi trình xử lý

OPEN ;
5 cho điều kiện
OPEN ;
6 kích hoạt và sửa đổi giá trị của biến trạng thái. Chẳng hạn, trong đoạn sau, trình xử lý
OPEN ;
5 đặt biến
OPEN ;
8 thành 1 và chúng tôi kiểm tra giá trị này sau mỗi lệnh gọi
OPEN ;
9

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET  v_last_row_fetched=1;

    OPEN cursor1;
    cursor_loop:LOOP
        FETCH cursor1 INTO  v_customer_name, v_contact_surname, v_contact_firstname;
        IF  v_last_row_fetched=1 THEN
            LEAVE cursor_loop;
        END IF;
        -- Do something with the row fetched.
    END LOOP cursor_loop;
    CLOSE cursor1;
    SET  v_last_row_fetched=0;

Điều quan trọng là đặt lại giá trị trạng thái này về 0 sau khi vòng lặp con trỏ kết thúc;

Đoạn mã sau tìm nạp sai nhân viên cho chỉ một bộ phận, bởi vì sau vòng lặp con trỏ đầu tiên, biến trạng thái tiếp tục cho biết rằng hàng cuối cùng đã được tìm nạp

Những khác biệt nhỏ trong cú pháp có thể yêu cầu viết lại mã. MySQL không hỗ trợ

OPEN ;
1,
OPEN ;
2 và
OPEN ;
3

Cách sử dụng Oracle

Con trỏ PL/SQL là con trỏ tới tập dữ liệu mà logic ứng dụng có thể lặp lại trên đó. Các tập dữ liệu chứa các hàng được trả về bởi các câu lệnh SQL. Bạn có thể tham khảo tập dữ liệu đang hoạt động trong các con trỏ được đặt tên từ bên trong chương trình

Có hai loại con trỏ PL/SQL

  • Con trỏ ẩn là con trỏ phiên do PL/SQL xây dựng và quản lý một cách tự động mà không do người dùng tạo hoặc xác định. PL/SQL sẽ mở một con trỏ ẩn mỗi khi bạn chạy một câu lệnh

    OPEN ;
    4 hoặc DML. Con trỏ ẩn còn được gọi là con trỏ SQL

  • Con trỏ rõ ràng là con trỏ phiên do người dùng tạo, xây dựng và quản lý. Các con trỏ được khai báo và định nghĩa bằng cách đặt tên cho nó và liên kết nó với một truy vấn. Không giống như một con trỏ ẩn, bạn có thể tham chiếu một con trỏ rõ ràng bằng tên của nó. Một con trỏ rõ ràng được gọi là con trỏ được đặt tên

ví dụ

Các ví dụ sau minh họa cách sử dụng con trỏ

  1. Xác định một con trỏ PL/SQL rõ ràng có tên là

    OPEN ;
    5

  2. Con trỏ chạy câu lệnh SQL để trả về các hàng từ cơ sở dữ liệu

  3. Vòng lặp PL/SQL đọc dữ liệu từ con trỏ, từng hàng và lưu các giá trị vào hai biến.

    OPEN ;
    6 và
    OPEN ;
    7

  4. Vòng lặp sử dụng thuộc tính

    OPEN ;
    8 để kết thúc khi hàng cuối cùng được đọc từ cơ sở dữ liệu

DECLARE
  CURSOR c1 IS
    SELECT last_name, job_id FROM employees
    WHERE REGEXP_LIKE (job_id, 'S[HT]_CLERK')
    ORDER BY last_name;
    v_lastname employees.last_name%TYPE; -- variable to store last_name
    v_jobid employees.job_id%TYPE; -- variable to store job_id
  BEGIN
    OPEN c1;
    LOOP -- Fetches 2 columns into variables
      FETCH c1 INTO v_lastname, v_jobid;
      EXIT WHEN c1%NOTFOUND;
    END LOOP;
  CLOSE c1;
END;

  1. Xác định con trỏ PL/SQL ẩn bằng cách sử dụng Vòng lặp

    OPEN ;
    9

  2. Con trỏ chạy một truy vấn và lưu trữ các giá trị được trả về vào một bản ghi

  3. Một vòng lặp lặp lại trên tập dữ liệu con trỏ và in kết quả

OPEN ;
1

Để biết thêm thông tin, hãy xem Khai báo và định nghĩa con trỏ rõ ràng và thuộc tính con trỏ ngầm định trong tài liệu Oracle

Sử dụng MySQL

Aurora MySQL chỉ hỗ trợ con trỏ trong các quy trình, chức năng và thủ tục được lưu trữ

Không giống như Oracle cung cấp một loạt các loại con trỏ, Aurora MySQL Cursors có các đặc điểm sau

  • Không nhạy cảm — Máy chủ có thể chọn tạo một bản sao của bảng kết quả hoặc truy cập dữ liệu nguồn khi con trỏ di chuyển

  • Chỉ đọc — Không thể cập nhật con trỏ

  • Không cuộn được — Con trỏ chỉ có thể được duyệt theo một hướng và không thể bỏ qua các hàng. Thao tác nâng cao con trỏ duy nhất được hỗ trợ là

    OPEN ;
    20

Khai báo con trỏ phải xuất hiện trước khai báo trình xử lý và sau khai báo biến và điều kiện

Tương tự như Oracle, các con trỏ được khai báo bằng

OPEN ;
21, được mở bằng
OPEN ;
22, được tìm nạp bằng
OPEN ;
23 và được đóng bằng
OPEN ;
24

Khai báo con trỏ

OPEN ;
7

Câu lệnh

OPEN ;
21 khởi tạo đối tượng con trỏ và liên kết nó với câu lệnh
OPEN ;
4.
OPEN ;
4 này sau đó được sử dụng để truy xuất các hàng con trỏ

Để tìm nạp các hàng, hãy sử dụng câu lệnh

OPEN ;
23. Như đã đề cập trước đó, chỉ hỗ trợ
OPEN ;
20. Số lượng biến đầu ra được chỉ định trong câu lệnh
OPEN ;
23 phải khớp với số lượng cột được con trỏ truy xuất

Con trỏ Aurora MySQL có các đặc điểm bổ sung

  • OPEN ;
    41 không được phép trong một con trỏ

  • Các thường trình được lưu trữ có thể có nhiều khai báo con trỏ, nhưng tất cả các con trỏ được khai báo trong một khối mã nhất định phải có một tên duy nhất

  • Con trỏ có thể được lồng vào nhau

mở con trỏ

OPEN ;

Lệnh

OPEN ;
22 điền dữ liệu vào con trỏ, tự động hoặc trong một bảng tạm thời và sẵn sàng hàng đầu tiên để sử dụng bởi câu lệnh
OPEN ;
23

Tìm nạp con trỏ

OPEN ;
2

Câu lệnh

OPEN ;
23 truy xuất hàng con trỏ hiện tại, gán các giá trị cột cho các biến được liệt kê trong câu lệnh
OPEN ;
23 và tiến con trỏ lên một hàng. Nếu hàng không có sẵn, nghĩa là con trỏ đã hết, điều kiện Không có dữ liệu được đưa ra với giá trị
OPEN ;
46 là '0200000'. Để nắm bắt điều kiện này hoặc điều kiện KHÔNG TÌM KIẾM thay thế, bạn phải tạo một trình xử lý điều kiện

Lập kế hoạch cẩn thận cho quy trình xử lý lỗi của bạn. Điều kiện tương tự có thể được đưa ra bởi

OPEN ;
4 câu lệnh hoặc con trỏ khác với câu lệnh bạn dự định. Đặt các hoạt động trong khối
OPEN ;
48 để liên kết mỗi con trỏ với trình xử lý riêng của nó

Đóng con trỏ

OPEN ;
4

Câu lệnh

OPEN ;
24 đóng một con trỏ đang mở. Nếu con trỏ với tên được chỉ định không tồn tại, sẽ xảy ra lỗi. Nếu một con trỏ không được đóng một cách rõ ràng, thì Aurora MySQL sẽ tự động đóng con trỏ đó ở cuối khối
OPEN ;
48 mà nó đã được khai báo

ví dụ

Ví dụ sau sử dụng một con trỏ để lặp qua các hàng nguồn và hợp nhất thành một bảng

OPEN ;
71

Tạo một bảng

OPEN ;
71

OPEN ;
7

Tạo và điền vào

OPEN ;
73

OPEN ;
1

Tạo một thủ tục để lặp qua

OPEN ;
73 và chèn hàng

OPEN ;
3

Chạy thủ tục được lưu trữ

OPEN ;
4

Chọn tất cả các hàng từ bảng

OPEN ;
71

OPEN ;
10

Tóm lược

Hành độngOracleAurora MySQL

Khai báo một con trỏ rõ ràng bị ràng buộc

OPEN ;
11
OPEN ;
12

Mở một con trỏ

OPEN ;
13
OPEN ;
13

Di chuyển con trỏ đến hàng tiếp theo và tìm nạp vào nhiều loại dữ liệu vô hướng (

OPEN ;
78,
OPEN ;
79 và
OPEN ;
10 đã được khai báo trong phần
OPEN ;
77)

Làm thế nào để viết cho con trỏ vòng lặp trong MySQL?

Trước tiên, bạn phải khai báo ít nhất một biến để sau này sử dụng với câu lệnh FETCH. .
DECLARE Declaring a variable..
DECLARE CURSOR FOR Declaring a cursor for a SELECT statement..

Làm cách nào để lặp qua một con trỏ trong MySQL?

Đóng con trỏ khi hoàn tất. .
Khai báo con trỏ. Câu lệnh sau đây khai báo một con trỏ và liên kết nó với một câu lệnh SELECT truy xuất các hàng mà con trỏ duyệt qua. KHAI BÁO tên_con trỏ CON TRỎ CHO select_statement
Mở một con trỏ. .
Tìm nạp dữ liệu vào các biến. .
Đóng con trỏ khi hoàn tất

Làm cách nào để sử dụng vòng lặp trong truy vấn MySQL SELECT?

Câu lệnh LOOP . [ nhãn. ] Các câu lệnh LOOP END LOOP [ nhãn ]; Các câu lệnh giữa các câu lệnh LOOP và END LOOP sẽ được lặp lại vô thời hạn, cho đến khi vòng lặp kết thúc. Bạn có thể kết thúc LOOP bằng câu lệnh LEAVE mà chúng tôi sẽ mô tả ngay sau đây.

Làm cách nào để tìm nạp nhiều hàng bằng con trỏ trong MySQL?

Quy trình .
Chỉ định con trỏ bằng câu lệnh DECLARE CURSOR
Thực hiện truy vấn và xây dựng bảng kết quả bằng câu lệnh OPEN
Truy xuất từng hàng một bằng cách sử dụng câu lệnh FETCH
Xử lý các hàng bằng câu lệnh XÓA hoặc CẬP NHẬT (nếu cần)
Kết thúc con trỏ bằng câu lệnh CLOSE