Làm cách nào để sử dụng con trỏ trong thủ tục lưu trữ MySQL?

Trong hầu hết các trường hợp, khi thực hiện các truy vấn SQL bằng cách sử dụng MySQL shell hoặc MySQL workbench, chúng tôi không lưu kết quả, mặc dù chúng tôi có chức năng lưu kết quả do máy chủ xử lý bằng quy trình được lưu trữ

Trong hướng dẫn này, tôi sẽ không thảo luận về các thủ tục, chức năng hoặc trình kích hoạt được lưu trữ. Thay vào đó, tôi sẽ chỉ đi sâu vào việc chỉ cho bạn cách bạn có thể sử dụng các con trỏ MySQL để chạy các kết quả trong các thủ tục được lưu trữ

Trước khi bắt đầu tạo và sử dụng con trỏ với các ví dụ, chúng ta hãy dành một chút thời gian để thảo luận về một số điểm chính về con trỏ mà bạn nên biết

Các tính năng của một con trỏ MySQL

  1. Con trỏ ở chế độ chỉ đọc và không thể cập nhật hoặc xóa dữ liệu trong tập kết quả khỏi quy trình
  2. Một con trỏ cần được khai báo trước khi nó có thể được sử dụng. Định nghĩa con trỏ chỉ là một bước để nói với MySQL rằng một con trỏ như vậy tồn tại và không truy xuất và dữ liệu
  3. Bạn chỉ có thể truy xuất dữ liệu theo thứ tự được chỉ định bởi câu lệnh chọn và không theo bất kỳ thứ tự đảo ngược nào, thường được gọi là không thể cuộn
  4. Bạn sử dụng một con trỏ bằng cách mở nó và sau đó thực hiện các thao tác tìm nạp trên dữ liệu được lưu trữ
  5. Bạn phải đóng con trỏ sau khi thao tác tìm nạp hoàn tất

Bây giờ chúng ta đã biết ý nghĩa của con trỏ, chúng ta có thể bắt đầu minh họa cách nó hoạt động bằng các ví dụ thực tế

Sử dụng cơ bản

Cú pháp chung để khai báo con trỏ trong MySQL rất đơn giản. Chúng tôi bắt đầu bằng cách sử dụng từ khóa KHAI THÁC như được hiển thị trong truy vấn mẫu bên dưới

Cách khai báo con trỏ

KHAI BÁO tên_con trỏ CON TRỎ CHO SELECT_expression;

Tên_con_trỏ là tên đặt cho con trỏ khi khai báo. Lưu ý rằng việc khai báo con trỏ phải sau bất kỳ biến nào được khai báo để ngăn MySQL dẫn đến lỗi

Tiếp theo là biểu thức SELECT, lưu câu lệnh SELECT liên kết với con trỏ

Làm thế nào để mở một con trỏ

Khi chúng tôi đã khai báo một con trỏ và MySQL biết rằng con trỏ tồn tại, chúng tôi có thể bắt đầu sử dụng nó, yêu cầu phải mở con trỏ

Cú pháp chung để mở một con trỏ như trong truy vấn bên dưới

MỞ tên_con_trỏ;

Lệnh này mở các con trỏ được tham chiếu theo tên của nó và người ta có thể bắt đầu sử dụng nó

Cách lấy dữ liệu

Mở con trỏ cho phép bạn tìm nạp thông tin được lưu trữ trong thủ tục, chức năng hoặc trình kích hoạt

Cú pháp chung để tìm nạp dữ liệu bằng con trỏ như được hiển thị

FETCH cursor_name VÀO các biến;

GHI CHÚ. Như đã đề cập, đảm bảo rằng con trỏ được sử dụng sau khi các biến được khai báo để tránh lỗi

Cách đóng và nhả con trỏ

Sau khi hoàn thành các thao tác yêu cầu con trỏ đã xác định, tốt nhất là đóng con trỏ để giải phóng bộ nhớ được liên kết với nó

Sau khi đóng con trỏ, người dùng cần mở lại con trỏ bằng từ khóa OPEN (hình trên) trước khi sử dụng con trỏ

Bạn không cần khai báo con trỏ sau câu lệnh close

Cú pháp chung để đóng con trỏ như trong truy vấn bên dưới

ĐÓNG tên_con_trỏ;

Xử lý lỗi

Con trỏ MySQL hoạt động bằng cách đọc đệ quy hàng tiếp theo trong tập kết quả. Nếu không có hàng tiếp theo, con trỏ sẽ đóng và không trả về dữ liệu trừ khi được chỉ định. Đây có thể là một vấn đề, đặc biệt là sau khi con trỏ đi đến cuối kết quả

Là một giải pháp, một trình xử lý KHÔNG TÌM KIẾM được xác định. Điều này chỉ định hành động sẽ được thực hiện nếu không tìm thấy hàng tiếp theo

Cú pháp chung để xử lý lỗi khi sử dụng con trỏ là

KHAI BÁO TIẾP TỤC XỬ LÝ KHÔNG TÌM KIẾM SET chấm dứt = true;

Giá trị kết thúc là một biến được sử dụng để xác định rằng con trỏ đã đi đến cuối kết quả. Tên biến có thể là bất kỳ tên nào miễn là phù hợp với quy ước đặt tên biến của MySQL

GHI CHÚ. Giống như tất cả các biến được sử dụng trong con trỏ, nó phải được xác định trước khi được sử dụng trong con trỏ

Trường hợp sử dụng ví dụ

Hãy để chúng tôi tạo một con trỏ thu thập email của khách hàng có sẵn trong bảng khách hàng của cơ sở dữ liệu mẫu Sakila

Tài nguyên để tải xuống và cài đặt cơ sở dữ liệu Sakila bên dưới

https. // nhà phát triển. mysql. com/doc/sakila/en/

Phần sau đây minh họa quy trình sử dụng con trỏ để tìm nạp email

SỬ DỤNG sakila;
PHÂN BIỆT $$
THỦ TỤC TẠO createNewsletter(
INOUT email VARCHAR(4000)
)
BẮT ĐẦU
KHAI BÁO chấm dứt INT DEFAULT FALSE;
KHAI BÁO emailAddr VARCHAR(255) MẶC ĐỊNH "";
KHAI BÁO coll_email CON TRỎ ĐỂ CHỌN email TỪ sakila. khách hàng WHERE (address_id > 100 AND address_id < 200);
KHAI BÁO TIẾP TỤC XỬ LÝ CHO KHÔNG TÌM KIẾM SET chấm dứt = TRUE;
MỞ thu_email;
nhậnEmail. VÒNG
TẢI coll_email VÀO emailAddr;
NẾU chấm dứt = TRUE THEN
ĐỂ LẠI getEmail;
KẾT THÚC NẾU;
ĐẶT email = CONCAT(emailAddr, ". ", email);
END LOOP getEmails;
ĐÓNG thu_email;
HẾT$$
PHÂN BIỆT ;
BỘ @email = "";
GỌI createNewsLetter(@collect_email);
CHỌN @collect_email;

Khi truy vấn thực thi, bạn sẽ nhận được kết quả như hình bên dưới

Làm cách nào để sử dụng con trỏ trong thủ tục lưu trữ MySQL?

Phần kết luận

Trong hướng dẫn này, chúng tôi đã hướng dẫn sử dụng con trỏ MySQL để phân tích cú pháp dữ liệu được lưu trữ trong tập kết quả. Xem xét tài liệu để nắm vững cách thực hiện các con trỏ

Chúng ta có thể sử dụng con trỏ trong thủ tục lưu trữ MySQL không?

MySQL hỗ trợ con trỏ bên trong các chương trình được lưu trữ . Cú pháp giống như trong SQL nhúng. Con trỏ có các thuộc tính này. nhạy cảm. Máy chủ có thể hoặc không thể tạo một bản sao của bảng kết quả của nó.

Làm thế nào để gọi con trỏ trong thủ tục được lưu trữ?

Để sử dụng con trỏ trong thủ tục SQL, bạn cần làm như sau. .
Khai báo con trỏ xác định tập kết quả
Mở con trỏ để thiết lập tập kết quả
Tìm nạp dữ liệu vào các biến cục bộ khi cần từ con trỏ, mỗi lần một hàng
Đóng con trỏ khi hoàn tất

Làm cách nào để thực thi con trỏ trong MySQL?

Khai báo con trỏ sử dụng câu lệnh DECLARE
Khai báo biến và điều kiện
Mở con trỏ đã khai báo bằng câu lệnh OPEN
Truy xuất các bản ghi mong muốn từ một bảng bằng Câu lệnh FETCH
Cuối cùng đóng con trỏ bằng câu lệnh CLOSE

Con trỏ hoạt động như thế nào trong MySQL?

Trong MySQL, một con trỏ cho phép xử lý từng hàng của tập kết quả. Một con trỏ được sử dụng cho tập hợp kết quả và được trả về từ một truy vấn. Bằng cách sử dụng con trỏ, bạn có thể lặp lại hoặc duyệt qua các kết quả của truy vấn và thực hiện các thao tác nhất định trên mỗi hàng