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ả

cú pháp

Cú 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àm

Ghi chú

  • Câu lệnh RETURN có thể được sử dụng trong một hàm để tạo điểm thoát. Mỗi hàm bạn tạo trong MySQL phải có ít nhất một câu lệnh RETURN, mặc dù nó có thể có nhiều hơn một câu lệnh RETURN nếu có nhiều điểm thoát trong hàm
  • Câu lệnh RETURN cũng có thể được sử dụng để kết thúc một LOOP và sau đó thoát ra với kết quả của hàm

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


SELECT sf_collect_order_details_id(1);

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 đề SELECT, WHERE hoặc ORDER BY của truy vấn. Ví dụ: bạn có thể sử dụng hàm dựng sẵn CAST trong mệnh đề SELECT để chuyển đổi một cột thành một kiểu dữ liệu khác, như trong CAST(plane_id AS CHAR). Biểu thức chuyển cột plane_id (số nguyên) thành kiểu dữ liệu ký tự. Theo cách tương tự, bạn có thể sử dụng một hàm được lưu trữ trong biểu thức của mình, áp dụng logic của riêng bạn vào cột plane_id hoặc bất kỳ cột nào khác

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ủ

  • chức năng lưu trữ. Các hàm mà bạn tạo dưới dạng các đối tượng cơ sở dữ liệu bằng cách sử dụng câu lệnh WHERE1 WHERE2
  • chức năng có thể tải. Các hàm được biên dịch dưới dạng tệp thư viện và sau đó được tải động vào máy chủ bằng cách chạy câu lệnh WHERE1 WHERE2
  • chức năng bản địa. Các chức năng được thêm vào máy chủ bằng cách sửa đổi mã nguồn MySQL và biên dịch nó thành mysqld

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ạn

Cũ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 WHERE5. Nếu bạn đã cài đặt nó, bạn có thể bỏ qua phần này. Nếu không, bạn có thể bắt đầu bằng cách chạy tập lệnh SQL sau để tạo cơ sở dữ liệu và các bảng của nó

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 WHERE6 bao gồm một khóa ngoại tham chiếu đến bảng WHERE7, vì vậy hãy đảm bảo tạo các bảng theo thứ tự hiển thị ở đây. Sau khi tạo bảng, bạn có thể thêm dữ liệu mẫu vào bảng để có thể kiểm tra chức năng của mình. Để điền vào các bảng, hãy chạy các câu lệnh WHERE8 sau

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 WHERE1 ORDER0, bạn nên chạy câu lệnh WHERE8 theo thứ tự được chỉ định ở đây để không vi phạm khóa ngoại được xác định trên bảng WHERE6. Khi bạn đã thiết lập và điền các bảng, bạn có thể bắt đầu tạo các hàm được lưu trữ

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 WHERE1 WHERE2. Tuyên bố tương tự như một tuyên bố WHERE1 ORDER6 ở một số khía cạnh. Trong cả hai trường hợp, bạn phải cung cấp tên cho đối tượng và bạn phải xác định quy trình. Bạn cũng có tùy chọn bao gồm mệnh đề ORDER7, một hoặc nhiều đặc điểm và một hoặc nhiều tham số

Bất chấp những điểm tương đồng này, câu lệnh WHERE1 WHERE2 khác nhau ở một số điểm quan trọng

  • Hàm được lưu trữ chỉ có thể trả về một giá trị, không giống như thủ tục được lưu trữ, có thể trả về nhiều giá trị hoặc toàn bộ tập kết quả
  • Một chức năng được lưu trữ chỉ hỗ trợ các tham số đầu vào. Một thủ tục được lưu trữ hỗ trợ các tham số BY0, BY1 và BY2 trong bất kỳ kết hợp nào
  • Một chức năng được lưu trữ phải bao gồm một mệnh đề BY3 trong định nghĩa của nó trước thủ tục. Mệnh đề chỉ định kiểu dữ liệu cho giá trị trả về của hàm. Các thủ tục được lưu trữ không hỗ trợ điều khoản này
  • Quy trình của hàm được lưu trữ phải bao gồm câu lệnh BY4 chỉ định giá trị trả về của hàm. Quy trình không nhất thiết phải bao gồm bất kỳ câu lệnh nào khác, chỉ có câu lệnh BY4. Nếu nó bao gồm các câu lệnh khác, thì chỉ câu lệnh BY4 có thể trả về giá trị

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 WHERE1 WHERE2, định nghĩa một hàm được lưu trữ để chuyển đổi pound thành kilôgam

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à BY9 và bao gồm một tham số đầu vào có tên là CAST0. Bạn không cần phải bao gồm một tham số khi định nghĩa một hàm, nhưng thông thường bạn sẽ muốn có ít nhất một tham số. Nếu bạn thêm nhiều hơn một, bạn cần phân tách chúng bằng dấu phẩy

Đị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ố, CAST1 CAST2. Tôi chọn kiểu dữ liệu này vì mục đích cuối cùng của tôi là muốn sử dụng hàm cho cột CAST3 trong bảng WHERE6, cột này cũng được xác định với kiểu dữ liệu đó

Ngoài ra, tôi đã sử dụng kiểu dữ liệu CAST1 CAST2 cho mệnh đề BY3. Mệnh đề chỉ định rằng giá trị trả về của hàm phải là một số nguyên trong phạm vi cho phép của kiểu dữ liệu này. Tôi cho rằng chúng tôi an toàn với loại dữ liệu này vì một pound tương đương với 0. 45359237 kilôgam, vì vậy giá trị được trả về sẽ không bao giờ vượt quá giá trị tối đa trong cột CAST3

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 CAST9 hoặc SELECT0 cho tham số CAST0 và mệnh đề BY3. Điều này sẽ giúp bạn linh hoạt hơn nếu bạn muốn sử dụng hàm để chuyển đổi các giá trị vượt quá giá trị trong cột CAST3

Mệnh đề BY3 được theo sau bởi đặc tính SELECT5. Đặc tính là một trong số các tùy chọn có thể được thêm vào định nghĩa hàm, mỗi tùy chọn ảnh hưởng đến hàm theo một cách khác nhau. Ví dụ: bạn có thể thêm một đặc điểm để biểu thị ngôn ngữ quy trình hoặc để xác định bản chất của quy trình. Đây là những đặc điểm tương tự có sẵn cho các thủ tục được lưu trữ

Đặc tính SELECT5 chỉ ra rằng hàm sẽ trả về cùng một kết quả cho cùng một tham số đầu vào mỗi khi hàm chạy. Theo mặc định, một chức năng được coi là không xác định trừ khi có quy định khác. Sử dụng đặc tính SELECT5 có thể giúp trình tối ưu hóa đưa ra các lựa chọn kế hoạch thực hiện tốt hơn. Tuy nhiên, việc gán đặc tính cho một hàm không xác định có thể khiến trình tối ưu hóa đưa ra các lựa chọn không chính xác

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 SELECT8 để thiết lập một câu lệnh ghép, mặc dù chỉ có một câu lệnh BY4. Thường thì thói quen của bạn sẽ bao gồm một câu lệnh ghép—một khối gồm một hoặc nhiều câu lệnh SQL—và tôi muốn chắc chắn rằng bạn hiểu cách đưa chúng vào định nghĩa hàm của mình. Cũng giống như thủ tục lưu trữ, không có gì lạ khi các nhà phát triển sử dụng câu lệnh ghép, ngay cả khi nó chỉ bao gồm một câu lệnh SQL duy nhất

Câu lệnh BY4 xác định một biểu thức toán học đơn giản nhân giá trị tham số đầu vào CAST0 với CAST(plane_id2 để đạt được số kilôgam cho trọng lượng được chỉ định. Kết quả từ phép tính này là kết quả trả về của hàm khi bạn chạy nó

Ví dụ trước cũng bao gồm hai câu lệnh CAST(plane_id3 bao quanh định nghĩa hàm. Câu lệnh CAST(plane_id3 đầu tiên thay đổi dấu phân cách thành dấu gạch chéo kép (//) và câu lệnh CAST(plane_id3 thứ hai thay đổi dấu phân cách trở lại dấu chấm phẩy (mặc định). Như bạn đã thấy trong bài viết trước, điều này cung cấp một cách để chuyển toàn bộ định nghĩa hàm tới máy chủ dưới dạng một câu lệnh

Xác minh một chức năng được lưu trữ mới được tạo

Sau khi bạn chạy câu lệnh WHERE1 WHERE2, bạn có thể xác minh rằng nó đã được thêm vào cơ sở dữ liệu WHERE5 bằng cách xem nó trong Bộ điều hướng, như thể hiện trong Hình 1. (Bạn có thể cần làm mới Bộ điều hướng để xem chức năng mới. )

Hàm trả về bảng MySQL

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 WHERE1 WHERE2 gần giống với câu lệnh bạn đã tạo, ngoại trừ việc bây giờ nó bao gồm mệnh đề ORDER7 sau từ khóa WHERE1

Hàm trả về bảng MySQL

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 đề ORDER7 chỉ định tài khoản nào đã được chỉ định là người tạo đối tượng. Tôi đã chạy câu lệnh WHERE1 WHERE2 khi tôi đã đăng nhập bằng tài khoản gốc trên phiên bản MySQL cục bộ của mình, vì vậy đó là tên người dùng được thêm vào định nghĩa. Theo mặc định, MySQL sử dụng tài khoản của người dùng chạy câu lệnh WHERE1 ORDER6, nhưng bạn có thể chỉ định một tài khoản khác miễn là tài khoản đó được cấp đủ quyền

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 CAST(plane_id3 hoặc dấu phân cách tùy chỉnh. Tuy nhiên, nếu bạn cập nhật định nghĩa và nhấp vào Áp dụng, Workbench sẽ thêm các thành phần đó cho bạn. (Nó cũng sẽ thêm một câu lệnh AS9 ORDER6 cần chạy trước câu lệnh WHERE1 WHERE2. )

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 CHAR)3 trong cơ sở dữ liệu CHAR)4

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 BY9, cùng với bất kỳ hàm được lưu trữ nào khác hoặc các thủ tục được lưu trữ đã được tạo trong cơ sở dữ liệu. Nếu bạn đang sử dụng thiết lập từ bài viết trước, cơ sở dữ liệu của bạn có thể bao gồm thủ tục được lưu trữ CHAR)6

Trong ví dụ trước, tôi đã bao gồm mệnh đề WHERE giới hạn kết quả đối với cơ sở dữ liệu WHERE5. Tuy nhiên, bạn có thể giới hạn thêm kết quả bằng cách chỉ định tên hàm trong mệnh đề WHERE và bằng cách chỉ định cột hoặc nhiều cột sẽ trả về. Ví dụ: câu lệnh SELECT sau đây giới hạn kết quả ở cột plane_id1 và hàm BY9 trong cơ sở dữ liệu WHERE5

1

2

3

4

CHỌN routine_definition

TỪ thông tin_lược đồ. quy trình

WHERE routine_schema = 'travel'

   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àm trả về bảng MySQL

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 BY4

Sử dụng chức năng được lưu trữ trong truy vấn MySQL

Sau 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 SELECT đơn giản không làm gì ngoài việc gọi hàm BY9. Ví dụ: câu lệnh SELECT sau chỉ bao gồm một mệnh đề SELECT và mệnh đề đó chỉ chứa một biểu thức

1

SELECT lbs_to_kg(132) AS max_kg;

Biểu thức gọi hàm BY9, chuyển vào WHERE00 làm giá trị tham số. Biểu thức cũng cung cấp tên cho cột đầu ra (WHERE01). Câu lệnh sẽ trả về giá trị là WHERE02

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 SELECT đơn giản. Ví dụ: bạn có thể sử dụng hàm được lưu trữ để chuyển đổi hoặc tăng giá trị của cột khi truy xuất dữ liệu, đó là điều tôi đã thực hiện trong câu lệnh SELECT sau đây

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 WHERE6 và WHERE7 dựa trên cột WHERE07 trong mỗi bảng. Mệnh đề SELECT của câu lệnh bao gồm một biểu thức sử dụng hàm BY9 để chuyển đổi cột CAST3 thành kilogam và trả về một cột có tên WHERE01. Câu lệnh trả về kết quả như hình 4

Hàm trả về bảng MySQL

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 WHERE12 và trọng lượng tính bằng kilôgam trong cột WHERE01 sau khi chuyển đổi các giá trị CAST3. Bằng cách bao gồm cả hai trọng số, bạn có thể nhanh chóng so sánh chúng để có cảm nhận chung về việc liệu hàm có trả về kết quả mong đợi hay không

Cập nhật một chức năng được lưu trữ trong MySQL

Như đã 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 đề ORDER7. Chúng cũng giống nhau theo một cách quan trọng khác. Bạn chỉ có thể thay đổi các đặc điểm. Bạn không thể thay đổi quy trình hoặc bất kỳ thành phần câu lệnh nào khác. Thay vào đó, trước tiên bạn phải hủy chức năng rồi tạo lại chức năng đó, kết hợp bất kỳ yếu tố mới nào

Để loại bỏ một chức năng được lưu trữ, bạn có thể sử dụng câu lệnh AS9 WHERE2, như trong ví dụ sau

1

DROP CHỨC NĂNG NẾU TỒN TẠI lbs_to_kg;

Mệnh đề WHERE18 WHERE19 là tùy chọn, nhưng đó là một cách hữu ích để tránh tạo ra lỗi khi bạn cố gắng loại bỏ một hàm. Mệnh đề này có thể đặc biệt hữu ích khi bạn đang phát triển lược đồ cơ sở dữ liệu của mình và bạn thường xuyên cập nhật các đối tượng

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 WHERE1 WHERE2 sau đây tạo lại hàm BY9 nhưng lần này thêm một câu lệnh WHERE23 và một cấu trúc WHERE18 cho câu lệnh ghép

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 WHERE23 khai báo biến cục bộ WHERE26 và gán cho nó kiểu dữ liệu WHERE27. Lưu ý rằng mệnh đề BY3 cũng đã được cập nhật thành kiểu dữ liệu WHERE27 để khớp với biến WHERE26. Sau đó, biến có thể được sử dụng trong câu lệnh BY4 cuối cùng để cung cấp giá trị đầu ra của hàm

Câu lệnh ghép cũng bao gồm một câu lệnh WHERE18. Câu lệnh bắt đầu bằng mệnh đề điều kiện đầu tiên, theo sau là mệnh đề WHERE33 và sau đó là mệnh đề WHERE34. Mỗi mệnh đề thực hiện cùng một logic dựa trên giá trị của tham số đầu vào CAST0. Nếu giá trị CAST0 nằm trong phạm vi đã chỉ định, biến WHERE26 được đặt thành giá trị được xác định trước dựa trên phạm vi đó. (Chúng ta sẽ đề cập chi tiết hơn về câu điều kiện ở phần sau của loạt bài này. )

Giá trị WHERE26 được xác định trước tiên bằng cách chuyển đổi giá trị CAST0 thành kilôgam và sau đó nối các kết quả với một chuỗi (nội dung thư). Ví dụ: nếu giá trị CAST0 lớn hơn 99999, biến WHERE26 được đặt thành số kilôgam cộng với thông báo ' kg vượt quá giới hạn trọng lượng của sân bay. ’

Để 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. WHERE42 và WHERE43. Hàm WHERE42 làm tròn số kilôgam đã tính thành một số nguyên và hàm WHERE43 nối số kilôgam đã làm tròn với văn bản đã chỉ định. Ví dụ: nếu trọng lượng tính bằng pound là 120.000, câu lệnh WHERE18 sẽ đặt biến WHERE26 thành '54431 kg vượt quá giới hạn trọng lượng đường băng. ' Bạn có thể tự mình thấy điều này bằng cách chạy câu lệnh SELECT sau

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àm trả về bảng MySQL

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 BY9 trong câu lệnh SELECT phức tạp hơn, giống như bạn đã làm trước đó

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 WHERE01. Thông báo dựa trên số pound trong cột CAST3, được chuyển đến hàm thông qua tham số của nó. Hình 6 cho thấy kết quả trả về của câu lệnh SELECT

Hàm trả về bảng MySQL

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 MySQL

Như 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 WHERE54 WHERE2. Ví dụ, câu lệnh sau thêm một đặc tính WHERE56 và đặc tính WHERE57 WHERE58

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 WHERE56 chỉ cần thêm một nhận xét mô tả mục đích của chức năng. Đặc tính WHERE57 WHERE58 hướng dẫn MySQL chạy quy trình trong ngữ cảnh bảo mật của tài khoản người dùng gọi hàm thay vì sử dụng tài khoản định nghĩa (hành vi mặc định)

Sau khi chạy câu lệnh WHERE54 WHERE2, bạn có thể xác minh rằng các đặc điểm đã được thêm vào bằng cách xem định nghĩa hàm trên tab Quy trình, như thể hiện trong Hình 7

Hàm trả về bảng MySQL

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 WHERE1 ORDER6 hiện bao gồm ba đặc điểm—một đặc điểm bạn đã thêm ban đầu và hai đặc điểm bạn đã thêm khi chạy câu lệnh WHERE54 WHERE2

Làm việc với các chức năng được lưu trữ trong MySQL

Mặ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

 

Hàm trả về bảng MySQL

Robert Sheldon 07 Tháng mười 2022

Hàm trả về bảng MySQL

Robert Sheldon 07 Tháng mười 2022

Giới thiệu câu lệnh INSERT của MySQL

3

  • MySQL

Trong phần trước của loạt bài này, tôi đã giới thiệu với bạn câu lệnh SELECT, một trong số các câu lệnh SQL thuộc danh mục ngôn ngữ thao tác dữ liệu (DML), một tập hợp con các câu lệnh được sử dụng để truy vấn và sửa đổi dữ liệu. Một câu lệnh DML khác là câu lệnh INSERT, cho phép bạn thêm dữ liệu vào bảng MySQL, cả … Đọc thêm

3

  • MySQL

Hàm trả về bảng MySQL

Lukas Vileikis 31 tháng một 2023

Hàm trả về bảng MySQL

Lukas Vileikis 31 tháng một 2023

Tối ưu hóa truy vấn trong MySQL. Tối ưu hóa số lần đọc

1

  • MySQL

Tối ưu hóa thao tác đọc là một trong những vấn đề nổi bật nhất liên quan đến bất kỳ người quản trị cơ sở dữ liệu nào. Bất kể loại hệ thống quản lý cơ sở dữ liệu nào đang được sử dụng - MySQL, các hương vị của nó như Percona Server hoặc MariaDB, MongoDB, TimescaleDB, SQL Server hoặc các hệ thống khác, các truy vấn đọc đều là mối quan tâm. Ví dụ về truy vấn đọc chính là các truy vấn CHỌN, nhưng rất nhiều trong số này cũng liên quan đến CẬP NHẬT và XÓA vì chúng cũng phải tìm nạp các hàng để được thao tác trên đó. … Đọc thêm

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.