Con trỏ là một câu lệnh CHỌN được xác định trong phần khai báo của chương trình được lưu trữ của bạn trong MySQL
cú pháp
Cú pháp khai báo con trỏ trong MySQL là
DECLARE cursor_name CURSOR FOR select_statement;
Tham số hoặc Đối số
cursor_nameTên để gán cho con trỏ. select_statementCâu lệnh SELECT kết hợp với con trỏThí dụ
Hãy xem cách khai báo một con trỏ trong MySQL
Ví dụ
DECLARE c1 CURSOR FOR SELECT site_id FROM sites WHERE site_name = name_in;
Tập hợp kết quả của con trỏ này là tất cả các giá trị site_id trong đó site_name khớp với biến name_in
Biến con trỏ yêu cầu xác định để lặp lại tập kết quả được trả về bởi câu lệnh SELECT
2. mở con trỏ
MỞ tên_con_trỏ;
Con trỏ cần mở để trỏ đến điểm bắt đầu của tập kết quả
3. Lấy con trỏ
FETCH cursor_name INTO variable_list;
Lệnh FETCH dùng để đọc các trường được định nghĩa trong truy vấn SELECT đã được sử dụng lúc khai báo con trỏ
4. Đóng con trỏ
ĐÓNG tên_con_trỏ;
Cần phải đóng con trỏ để đặt lại tập kết quả và xóa tham chiếu đến tập kết quả
điều kiện tiên quyết
Bạn phải tạo các bảng cần thiết với dữ liệu để biết cách sử dụng con trỏ trong MySQL. Mở terminal và chạy lệnh sau để kết nối với máy chủ MySQL nếu không có mật khẩu cho người dùng root
$ sudo mysql -u gốc
Chạy lệnh sau để chọn cơ sở dữ liệu
SỬ DỤNG test_db;
Chạy lệnh sau để tạo cơ sở dữ liệu có tên test_db
TẠO CƠ SỞ DỮ LIỆU test_db;
Chạy truy vấn sau để tạo bảng có tên sales_persons với bốn trường
TẠO BẢNG sales_persons[
id INT AUTO_INCREMENT PRIMARY KEY,
tên VARCHAR[30] KHÔNG NULL,
email VARCHAR[50],
contact_no VARCHAR[30]];
Chạy truy vấn sau để chèn ba bản ghi vào bảng sales_person
CHÈN VÀO `sales_persons` [`id`, `name`, `email`, `contact_no`] GIÁ TRỊ [NULL, 'Kamal Hasan', 'kamal@gmail. com', '0191275634'],
[NULL, 'Nila Hossain', 'nila@gmail. com', '01855342357'],
[NULL, 'Abir Hossain', 'abir@yahoo. com', '01634235698'];
Chạy truy vấn sau để tạo một bảng có tên là sales với bốn trường chứa khóa ngoại sẽ tạo mối quan hệ một-nhiều từ bảng sales_persons đến bảng sales
TẠO BẢNG bán hàng[
id INT KHÔNG NULL KHÓA CHÍNH,
sales_date NGÀY KHÔNG NULL,
số tiền INT,
sp_id int,
RÀNG BUỘC fk_sp NGOẠI KHÓA [sp_id]
THAM KHẢO sales_persons[id]
TRÊN CASCADE XÓA TRÊN CASCADE CẬP NHẬT];
Chạy truy vấn sau để chèn bốn bản ghi vào bảng bán hàng
CHÈN VÀO GIÁ TRỊ `doanh số` [`id`, `ngày_bán_hàng`, `số tiền`, `sp_id`]
['90', '2021-11-09', '800000', '1'],
['34', '2020-12-15', '5634555', '3'],
['67', '23-12-2021', '900000', '1'],
['56', '31-12-2020', '6700000', '1'];
Sử dụng con trỏ MySQL
Con trỏ chủ yếu được sử dụng trong thủ tục hoặc hàm MySQL có chứa một hoặc nhiều truy vấn chọn và con trỏ được khai báo sẽ lặp lại từng bản ghi của tập kết quả do truy vấn trả về. Tạo một hàm MySQL có tên Tính toán_Bonus với câu lệnh sau sẽ lấy một đối số nguyên và trả về một giá trị float. Truy vấn CHỌN đã được sử dụng trong hàm sẽ tính tổng số tiền bán hàng của từng nhân viên bán hàng và trả về tên của nhân viên bán hàng và tổng doanh số bán hàng trong tập kết quả. Chức năng của con trỏ là tính 15% tổng doanh số dưới dạng tiền thưởng nếu tổng số tiền bán hàng lớn hơn 10000; . Hàm sẽ trả về số tiền thưởng dựa trên giá trị id của nhân viên bán hàng. Chạy câu lệnh sau từ dấu nhắc MySQL sau khi chọn cơ sở dữ liệu để tạo hàm
PHÂN PHỐI //
CHỨC NĂNG TẠO `Tính toán_Bonus`[`spid` INT]
TRẢ LẠI VARCHAR[200]
ĐỌC DỮ LIỆU SQL
XÁC ĐỊNH
BẮT ĐẦU
KHAI BÁO thực hiện INT DEFAULT FALSE;
KHAI BÁO tổng INT MẶC ĐỊNH 0;
KHAI BÁO người VARCHAR[50] MẶC ĐỊNH "";
KHAI THÁC tiền thưởng INT MẶC ĐỊNH 0;
KHAI BÁO đầu ra VARCHAR[200];
KHAI BÁO CU CURSOR FOR
CHỌN tên, SUM[số tiền]
TỪ bán hàng, sales_persons
NƠI sales_persons. id=bán hàng. sp_id và sp_id = spid
NHÓM Theo sp_id;
KHAI BÁO TIẾP TỤC XỬ LÝ CHO KHÔNG TÌM SET done = TRUE;
MỞ cur;
FETCH cur INTO người, tổng số;
NẾU tổng > 10000 THÌ
SET tiền thưởng = tổng*0. 15;
KHÁC
SET tiền thưởng = tổng*0. 10;
KẾT THÚC NẾU;
SET đầu ra = CONCAT["Tiền thưởng của ", người," là TK. ", thưởng, ". "];
ĐÓNG CỬA;
TRẢ LẠI đầu ra;
KẾT THÚC;
//
Chạy truy vấn sau để đọc tất cả các bản ghi của bảng sales_persons
CHỌN * TỪ sales_persons;
Chạy truy vấn sau để đọc tất cả các bản ghi của bảng bán hàng
CHỌN * TỪ bán hàng;
Chạy truy vấn sau để gọi hàm Tính toán_Bonus[] của MySQL với giá trị đối số là 1. Theo bảng bán hàng, có ba bản ghi cho nhân viên bán hàng có id là 1. Vì vậy, tiền thưởng sẽ giảm 15% [6700000+900000+800000]
CHỌN Tính_Thưởng [1];
Chạy truy vấn sau để gọi hàm Tính toán_Bonus[] của MySQL với giá trị đối số là 2. Theo bảng bán hàng, không có bản ghi nào cho nhân viên bán hàng có id là 2. Vì vậy, tiền thưởng sẽ là 0
CHỌN Tính_Thưởng [2];
Chạy truy vấn sau để gọi hàm Tính toán_Bonus[] của MySQL với giá trị đối số là 3. Theo bảng bán hàng, có một bản ghi cho nhân viên bán hàng có id là 3. Vì vậy, tiền thưởng sẽ là 15% của 5634555
CHỌN Tính_Thưởng [3];
Phần kết luận
Con trỏ MySQL làm cho tác vụ cụ thể dễ dàng hơn bằng cách lặp lại từng hàng của bảng. Con trỏ MySQL đã được hiển thị trong hướng dẫn này bằng cách sử dụng chức năng MySQL. Con trỏ MySQL cũng có thể được sử dụng trong thủ tục MySQL. Tôi hy vọng khái niệm về con trỏ MySQL sẽ bị xóa đối với người dùng và người dùng sẽ có thể sử dụng con trỏ sau khi đọc hướng dẫn này