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 Show
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 OracleCon 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
ví dụCác ví dụ sau minh họa cách sử dụng con trỏ
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;
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 MySQLAurora 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
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
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ượcHà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 DECLARE 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 |