Hàm trả về bảng MySQL
Trong MySQL, câu lệnh RETURN được sử dụng khi bạn muốn thoát khỏi một hàm và trả về kết quả của hàm. Nó cũng có thể được sử dụng để kết thúc một LOOP và sau đó thoát với kết quả Show
cú phápCú pháp của câu lệnh RETURN trong MySQL là RETURN result; Tham số hoặc Đối sốresultKết quả trả về của hàmGhi chú
Ví dụHãy xem một ví dụ cho thấy cách sử dụng câu lệnh RETURN trong MySQL DELIMITER // CREATE FUNCTION CalcIncome ( starting_value INT ) RETURNS INT BEGIN DECLARE income INT; SET income = 0; label1: LOOP SET income = income + starting_value; IF income < 3000 THEN ITERATE label1; END IF; LEAVE label1; END LOOP label1; RETURN income; END; // DELIMITER ; Trong ví dụ RETURN này, hàm có tên CalcIncome sẽ thoát khi gặp câu lệnh RETURN và trả về giá trị được lưu trữ trong biến thu nhập như là kết quả của hàm Bạn cũng có thể sử dụng câu lệnh RETURN để kết thúc vòng lặp có tên nhãn1. Ví dụ DELIMITER // CREATE FUNCTION CalcIncome ( starting_value INT ) RETURNS INT BEGIN DECLARE income INT; SET income = 0; label1: LOOP SET income = income + starting_value; IF income < 3000 THEN ITERATE label1; END IF; RETURN income; END LOOP label1; RETURN starting_value; END; // DELIMITER ; Trong ví dụ RETURN này, chúng tôi sử dụng câu lệnh RETURN hai lần Câu lệnh RETURN đầu tiên nằm trong câu lệnh LOOP và khi gặp sẽ thoát khỏi LOOP, thoát khỏi hàm và trả về giá trị được lưu trong biến gọi là income Câu lệnh RETURN thứ hai được sử dụng ở cuối hàm để thoát khỏi hàm và trả về giá trị được lưu trữ trong biến started_value Trước tiên, bạn phải tạo Bảng "bảng tạm thời" theo Tập dữ liệu đã chọn của mình. Gọi "sf_collect_order_details_id" theo cách sau
Cuối cùng, nếu "sf_collect_order_details_id" trả về 1, thì bạn đã có sẵn Tập dữ liệu trong "temp_table". Vì vậy, bạn có thể truy xuất Tập dữ liệu của mình từ "temp_table". Trong ví dụ này, tôi đặt tiêu chí chọn Dữ liệu rất đơn giản. tốt hơn là sử dụng Chức năng được lưu trữ nếu bạn phải thực hiện một lựa chọn phức tạp Các hàm được lưu trữ trong MySQL trả về một giá trị vô hướng và có thể được sử dụng trong câu lệnh SQL. Trong bài viết này, Robert Sheldon giải thích cách tạo và sử dụng chức năng được lưu trữ trong MySQL Bài viết này là một phần trong loạt bài tiếp theo của Robert Sheldon về Học MySQL. Để xem tất cả 11 mục trong sê-ri, hãy nhấp vào đây Trong ba phần trước của loạt bài này, tôi đã tập trung vào việc tạo các đối tượng cơ sở dữ liệu cơ bản mà bạn có thể sử dụng để bắt đầu với MySQL. Bạn đã học cách xây dựng cơ sở dữ liệu ban đầu, sau đó thêm bảng, dạng xem và thủ tục được lưu trữ. Trong bài viết này, tôi đề cập đến một loại đối tượng quan trọng hơn, hàm được lưu trữ, một thủ tục được lưu trữ trong cơ sở dữ liệu và có thể được gọi theo yêu cầu, tương tự như hàm vô hướng do người dùng định nghĩa trong SQL Server hoặc các hệ thống cơ sở dữ liệu khác Các chức năng được lưu trữ hoạt động giống như các chức năng tích hợp sẵn của MySQL. Bạn có thể gọi một trong hai loại hàm trong một biểu thức, chẳng hạn như các hàm trong mệnh đề Trước khi tôi tiếp tục với các hàm được lưu trữ, điều quan trọng cần lưu ý là có ba loại hàm MySQL khác nhau mà bạn có thể thêm ở cấp cơ sở dữ liệu hoặc máy chủ
Bài viết này tập trung vào việc tạo các hàm được lưu trữ, có nhiều đặc điểm giống như các thủ tục được lưu trữ của MySQL. Trên thực tế, tôi đã cân nhắc viết về cả hai trong bài viết trước, nhưng tôi nghĩ rằng có đủ sự khác biệt giữa chúng để đảm bảo có một bài viết riêng. Nó cũng cung cấp một cách nhất quán hơn để giới thiệu từng loại đối tượng MySQL chính, ngay cả khi điều đó có nghĩa là lặp lại một số thông tin. Với suy nghĩ này, hãy bắt đầu với chức năng được lưu trữ Chuẩn bị môi trường MySQL của bạnCũng như một số bài viết trước, các ví dụ trong bài viết này dựa trên cơ sở dữ liệu 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 THẢI CƠ SỞ DỮ LIỆU NẾU TỒN TẠI du lịch; TẠO CƠ SỞ DỮ LIỆU du lịch; SỬ DỤNG du lịch; TẠO BẢNG nhà sản xuất ( manufacturer_id INT CHƯA KÝ KHÔNG NULL AUTO_INCREMENT, nhà sản xuất VARCHAR(50) NOT NULL, create_date DẤU THỜI GIAN NOT NULL DEFAULT CURRENT_TIMESTAMP, last_update DẤU THỜI GIAN NOT NULL MẶC ĐỊNH CURRENT_TIMESTAMP BẬT CẬP NHẬT CURRENT_TIMESTAMP, CHÍNH CHÍNH KEY (manufacturer_id) ) ENGINE=InnoDB AUTO_INCREMENT=1001; TẠO BẢNG máy bay ( plane_id INT KHÔNG ĐƯỢC KÝ KHÔNG NULL AUTO_INCREMENT, máy bay VARCHAR(50) NOT NULL, manufacturer_id INT CHƯA KÝ KHÔNG NULL, engine_type VARCHAR(50) NOT NULL, engine_count TINYINT NOT NULL, max_weight VỪA KHÔNG ĐƯỢC KÝ KHÔNG NULL, sải cánh THẬP PHÂN(5,2) NOT NULL, plane_length DECIMAL(5,2) NOT NULL, parking_area INT ĐƯỢC TẠO LUÔN LUÔN AS ((sải cánh * plane_length)) STORED, icao_code CHAR(4) NOT NULL, create_date DẤU THỜI GIAN NOT NULL DEFAULT CURRENT_TIMESTAMP, last_update DẤU THỜI GIAN NOT NULL MẶC ĐỊNH CURRENT_TIMESTAMP BẬT CẬP NHẬT CURRENT_TIMESTAMP, CHÍNH CHÍNH KEY (plane_id), HÀNG CHẾ fk_manufacturer_id FOREIGN KEY (manufacturer_id) TÀI LIỆU THAM KHẢO nhà sản xuất (manufacturer_id) ) ENGINE=InnoDB AUTO_INCREMENT=101; Bảng 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 CHÈN VÀO nhà sản xuất (nhà sản xuất) GIÁ TRỊ ('Airbus'), ('Beechcraft'), ('Piper'); CHÈN VÀO máy bay (máy bay, manufacturer_id, engine_type, engine_count, trọng lượng tối đa, sải cánh, plane_length, icao_code) GIÁ TRỊ ('A380-800', 1001< . 65, 'jet', 4, 1267658, 261.65, 238. 62, 'A388'), ('A319neo Sharklet', 1001, 'jet', 2, 166449, 117.45, 111. 02, 'A319'), ('ACJ320neo (Phiên bản máy bay phản lực dành cho doanh nghiệp)', 1001, 'jet', 2, 174165, 117. 45, 123. 27, 'A320'), ('A300-200 (A300-C4-200, F4-200)', . 08 1001, 'jet', 2, 363760, 147.08, 175. 50, 'A30B'), ('Beech 390 Premier I, IA, II (Raytheon Premier I)',< 1002, 'jet', 2, 12500, 44.50, 46. 00, 'PRM1'), ('Beechjet 400 (từ/giống như MU-300-10 Diamond II)', 1002, 'jet', 2, 15780, 43.50, 48. 42, 'BE40'), ('1900D', 1002, 'Turboprop', 2,17120, 57.75, 57. 67, 'B190'), ('PA-24-400 Comanche', 1003, 'piston', 1, 3600, 36.00, 24. 79, 'PA24'), ('PA-46-600TP Malibu Meridian, M600', 1003, 'Turboprop', 1, 6000, 43. 17, 29. 60, 'P46T'), ('J-3 Cub', 1003 . 00, 'piston', 1, 1220, 38.00, 22. 42, 'J3'); Như với câu lệnh Tạo một chức năng được lưu trữ trong MySQLĐể thêm một chức năng được lưu trữ vào cơ sở dữ liệu MySQL, bạn có thể sử dụng câu lệnh Bất chấp những điểm tương đồng này, câu lệnh
Với những hướng dẫn này, chúng ta hãy xem xét một ví dụ đơn giản về câu lệnh 1 2 3 4 5 6 7 8 DÒNG KHÁC // TẠO CHỨC NĂNG lbs_to_kg(lbs MEDIUMINT UNSIGNED) TRẢ LẠI TRUNG BÌNH KHÔNG KÝ XÁC ĐỊNH BẮT ĐẦU TRẢ LẠI (lbs * 0.45359237); END// DÒNG KHÁC ; Hàm có tên là Định nghĩa tham số được đặt trong dấu ngoặc đơn và bao gồm loại dữ liệu của tham số, Ngoài ra, tôi đã sử dụng kiểu dữ liệu Nếu bạn muốn hỗ trợ phạm vi giá trị lớn hơn, thay vào đó, bạn có thể sử dụng loại dữ liệu Mệnh đề Đặc tính Thói quen của chức năng xuất hiện sau các đặc điểm được liệt kê. Đối với thói quen này, tôi đã sử dụng cú pháp Câu lệnh Ví dụ trước cũng bao gồm hai câu lệnh Xác minh một chức năng được lưu trữ mới được tạoSau khi bạn chạy câu lệnh Hình 1. Xem chức năng trong Bộ điều hướng Từ Bộ điều hướng, bạn có thể mở định nghĩa hàm trong tab Quy trình bằng cách nhấp vào biểu tượng cờ lê bên cạnh tên hàm. Hình 2 hiển thị định nghĩa chức năng trên tab Quy trình. Câu lệnh Hình 2. Xem định nghĩa hàm trên tab Quy trình Như bạn đã thấy với các chế độ xem và thủ tục được lưu trữ, mệnh đề Bạn có thể nhận thấy rằng định nghĩa hàm trên tab Quy trình không bao gồm các câu lệnh Một cách khác để bạn có thể xác minh rằng hàm đã được tạo là truy vấn chế độ xem 1 2 CHỌN * TỪ lược đồ thông tin. quy trình WHERE routine_schema = 'du lịch'; Kết quả phải bao gồm hàm Trong ví dụ trước, tôi đã bao gồm mệnh đề 1 2 3 4 CHỌN routine_definition TỪ thông tin_lược đồ. quy trình WHERE routine_schema = 'travel' VÀ routine_name = 'lbs_to_kg'; Câu lệnh bây giờ chỉ trả về một giá trị duy nhất, mặc dù có thể khó đọc. Như bạn đã thấy với các thủ tục được lưu trữ, bạn có thể xem toàn bộ giá trị trong một cửa sổ riêng biệt. Nhấp chuột phải vào giá trị trực tiếp trong kết quả và nhấp vào Mở Giá trị trong Trình xem. MySQL khởi chạy một cửa sổ hiển thị giá trị, như trong Hình 3. (Chọn tab Văn bản nếu nó chưa được chọn. ) Hình 3. Kiểm tra phần thân thường trình của hàm trong Viewer Như bạn có thể thấy, cửa sổ chỉ hiển thị phần thân thông thường của hàm, trong trường hợp này, là một câu lệnh ghép bao gồm câu lệnh Sử dụng chức năng được lưu trữ trong truy vấn MySQLSau khi bạn xác minh rằng chức năng của mình đã được tạo, bạn nên kiểm tra xem chức năng đó có hoạt động như mong đợi không. Một cách để làm điều này là tạo một câu lệnh 1 SELECT lbs_to_kg(132) AS max_kg; Biểu thức gọi hàm Trong nhiều trường hợp, bạn sẽ muốn sử dụng chức năng được lưu trữ của mình cho nhiều mục đích hơn là chỉ chạy nó trong một câu lệnh 1 2 3 4 5 6 CHỌN a. máy bay, max_weight AS max_lbs, lbs_to_kg(max_weight) AS max_kg TỪ máy bay a INNER THAM GIA manufacturers m BẬT a. manufacturer_id = m. nhà sản xuất_id Ở ĐÂU m. nhà sản xuất = 'airbus' ĐẶT HÀNG BỞI a. mặt phẳng; Câu lệnh nối các bảng hinh 4. Sử dụng chức năng được lưu trữ trong truy vấn của bạn Kết quả bao gồm trọng lượng ban đầu (tính bằng pound) trong cột Cập nhật một chức năng được lưu trữ trong MySQLNhư đã chỉ ra trước đó, các chức năng được lưu trữ của MySQL tương tự như các thủ tục được lưu trữ theo một số cách. Ví dụ: cả hai đều hỗ trợ các đặc điểm, tham số đầu vào và mệnh đề Để loại bỏ một chức năng được lưu trữ, bạn có thể sử dụng câu lệnh 1 DROP CHỨC NĂNG NẾU TỒN TẠI lbs_to_kg; Mệnh đề Sau khi bỏ chức năng, bạn có thể sửa đổi định nghĩa để đáp ứng các yêu cầu mới của mình. Ví dụ: câu lệnh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 DÒNG KHÁC // TẠO CHỨC NĂNG lbs_to_kg(lbs MEDIUMINT UNSIGNED) TRẢ LẠI VARCHAR(50) XÁC ĐỊNH BẮT ĐẦU KHAI BÁO tin nhắn VARCHAR(50); NẾU lbs > 999999 THEN SET msg = CONCAT(VÒNG((lbs * 0.45359237), 0), ' kg vượt quá giới hạn trọng lượng tại sân bay. '); ELSEIF lbs >= 100000 AND lbs <= 999999 THEN SET msg = CONCAT(VÒNG((lbs * 0.45359237), 0), ' kg vượt quá giới hạn trọng lượng đường băng. '); KHÁC ĐẶT tin nhắn = CONCAT(ROUND((lbs * 0.45359237), 0), ' kg trong giới hạn trọng lượng. '); END IF; RETURN tin nhắn; END// DÒNG KHÁC ; Câu lệnh Câu lệnh ghép cũng bao gồm một câu lệnh Giá trị Để giúp thực hiện logic này, mỗi mệnh đề điều kiện cũng bao gồm hai chức năng tích hợp. 1 SELECT lbs_to_kg(120000) AS max_kg; Câu lệnh sẽ trả về kết quả như trong Hình 5 Hình 5. Xem kết quả được trả về bởi chức năng lưu trữ được cập nhật Bạn cũng có thể sử dụng hàm 1 2 3 4 5 6 CHỌN m. nhà sản xuất, a. máy bay, max_weight AS max_lbs, lbs_to_kg(max_weight) AS max_kg TỪ máy bay a INNER THAM GIA manufacturers m BẬT a. manufacturer_id = m. nhà sản xuất_id ĐẶT HÀNG BỞI m. nhà sản xuất, a. mặt phẳng; Bây giờ, mỗi hàng được trả về bao gồm một trong ba thông báo trong cột Hình 6. Sử dụng một chức năng được lưu trữ trong các biểu thức truy vấn của bạn Tất nhiên, chức năng của bạn có thể bao gồm một quy trình phức tạp hơn nhiều so với những gì tôi đã làm ở đây, nhưng những ví dụ này đủ để cho bạn biết bạn có thể làm gì với các chức năng được lưu trữ và giá trị của chúng khi xây dựng các truy vấn của bạn Thay đổi một chức năng được lưu trữ trong MySQLNhư tôi đã đề cập trước đó, các yếu tố duy nhất của định nghĩa hàm được lưu trữ mà bạn có thể thay đổi là các đặc điểm. Đối với điều này, bạn có thể sử dụng câu lệnh 1 2 3 THAY ĐỔI CHỨC NĂNG lbs_to_kg BÌNH LUẬN 'chuyển đổi trọng lượng thành kilôgam và tạo thông báo' SQL BẢO MẬT INVOKER; Đặc tính Sau khi chạy câu lệnh Hình 7. Xem định nghĩa chức năng được lưu trữ trên tab Quy trình Câu lệnh Làm việc với các chức năng được lưu trữ trong MySQLMặc dù các chức năng được lưu trữ tương tự như các thủ tục được lưu trữ, nhưng chúng phục vụ một mục đích khác rõ ràng. để trả về một giá trị có thể được sử dụng bởi một biểu thức trong quá trình đánh giá của nó. Vì lý do này, các chức năng được lưu trữ có thể cực kỳ hữu ích và rất đáng để bổ sung vào kho công cụ của bạn, đặc biệt là vì chúng rất dễ tạo và thực thi. Tuy nhiên, chúng cũng có thể ảnh hưởng đến hiệu suất nếu không được triển khai cẩn thận. Ví dụ: nếu truy vấn của bạn trả về hàng nghìn hàng dữ liệu, thì một hàm quá phức tạp có thể khiến hệ thống của bạn gặp khó khăn khi MySQL cố gắng áp dụng logic cho từng hàng. Tuy nhiên, khi được sử dụng đúng cách, các hàm được lưu trữ có thể cực kỳ hữu ích, đặc biệt khi bạn trở nên lão luyện hơn trong việc xây dựng các truy vấn SQL
Robert Sheldon 07 Tháng mười 2022 Robert Sheldon 07 Tháng mười 2022Giới thiệu câu lệnh INSERT của MySQL 3 3 Lukas Vileikis 31 tháng một 2023 Lukas Vileikis 31 tháng một 2023Tối ưu hóa truy vấn trong MySQL. Tối ưu hóa số lần đọc 1 Chúng ta có thể trả về Datatable từ hàm trong SQL không?Để trả về một bảng từ hàm, bạn sử dụng cú pháp RETURNS TABLE và chỉ định các cột của bảng . Mỗi cột cách nhau bởi dấu phẩy (,). Trong hàm, chúng tôi trả về một truy vấn là kết quả của câu lệnh SELECT.
Hàm MySQL có thể trả về cái gì?Các hàm được lưu trữ trong MySQL trả về một giá trị vô hướng và có thể được sử dụng trong câu lệnh SQL.
Làm thế nào để một hàm trả về một giá trị trong MySQL?Để trả về một giá trị từ thủ tục được lưu trữ, bạn cần phải sử dụng biến phiên cụ thể do người dùng xác định. Thêm biểu tượng @ trước tên biến .
Làm cách nào để trả lại dữ liệu trong MySQL?Dữ liệu có thể được tìm nạp từ các bảng MySQL bằng cách thực thi câu lệnh SQL SELECT thông qua hàm mysql_query của PHP . Bạn có một số tùy chọn để lấy dữ liệu từ MySQL. Tùy chọn được sử dụng thường xuyên nhất là sử dụng hàm mysql_fetch_array(). Hàm này trả về hàng dưới dạng một mảng kết hợp, một mảng số hoặc cả hai. |