Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Các thủ tục được lưu trữ trong MySQL là các đối tượng chứa một hoặc nhiều câu lệnh SQL để sử dụng lại. Chúng thường chứa logic kinh doanh. Robert Sheldon trình bày cách tạo và gọi các thủ tục được lưu trữ

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

Giống như hầu hết các hệ thống quản lý cơ sở dữ liệu quan hệ, MySQL hỗ trợ việc sử dụng các thủ tục được lưu trữ có thể được gọi theo yêu cầu bởi các ứng dụng dựa trên dữ liệu. Mỗi thủ tục được lưu trữ là một đối tượng cơ sở dữ liệu được đặt tên chứa một thường trình được tạo thành từ một hoặc nhiều câu lệnh SQL. Khi một ứng dụng gọi thủ tục lưu sẵn, MySQL sẽ thực thi các câu lệnh đó và trả về kết quả cho ứng dụng.  

Một thói quen của thủ tục có thể bao gồm nhiều loại câu lệnh, bao gồm ngôn ngữ định nghĩa dữ liệu (DDL) và ngôn ngữ thao tác dữ liệu (DML). Các thủ tục được lưu trữ của MySQL cũng hỗ trợ việc sử dụng các tham số đầu vào và đầu ra, làm cho chúng trở thành một công cụ rất linh hoạt để đóng gói logic câu lệnh

Các thủ tục được lưu trữ cho phép sử dụng lại mã SQL thường xuyên khi cần, giúp đơn giản hóa việc phát triển ứng dụng và giảm các lỗi câu lệnh. Các nhà phát triển không phải viết các truy vấn phức tạp cho từng yêu cầu của ứng dụng và các nhóm QA không cần dành nhiều thời gian để xác minh các truy vấn khi kiểm tra ứng dụng

Khả năng sử dụng lại mã cũng làm giảm lưu lượng mạng vì thủ tục được lưu trữ có thể được gọi bằng một câu lệnh CALL duy nhất, bất kể truy vấn cơ bản phức tạp đến mức nào. Các thủ tục được lưu trữ cũng có thể mang lại mức độ bảo mật cao hơn bằng cách trừu tượng hóa cấu trúc cơ sở dữ liệu cơ bản và loại bỏ các truy vấn đặc biệt ở cấp ứng dụng

Trong bài viết này, tôi trình bày cách tạo và cập nhật thủ tục lưu sẵn, cũng như gọi chúng bằng câu lệnh CALL. Bạn sẽ học cách xây dựng cả quy trình cơ bản và quy trình được tham số hóa sử dụng các tham số đầu vào và đầu ra. Cũng như các bài viết trước trong loạt bài này, tôi đã sử dụng phiên bản Cộng đồng MySQL trên máy tính Windows để xây dựng các ví dụ mà tôi đã tạo trong MySQL Workbench, giao diện người dùng đồ họa (GUI) đi kèm với phiên bản Cộng đồng

Chuẩn bị môi trường MySQL của bạn

Các ví dụ trong bài viết này dựa trên cơ sở dữ liệu travel, cũng là cơ sở dữ liệu mà tôi đã sử dụng cho bài viết trước về chế độ xem MySQL. Bài viết này sử dụng các bảng và dữ liệu tương tự để trình bày cách làm việc với các thủ tục được lưu trữ. Nếu bạn đã thử các ví dụ trong bài viết trước, cơ sở dữ liệu travel có thể vẫn được cài đặt trên phiên bản MySQL của bạn. Nếu không, bạn có thể sử dụng 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 airplanes bao gồm một khóa ngoại tham chiếu đến bảng manufacturers, 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 quy trình được lưu trữ của mình. Để điền vào bảng, hãy chạy các câu lệnh INSERT sau

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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)',< . 50 1002, 'jet', 2, 12500, 44.50, 46. 00, 'PRM1'),

  ('Beechjet 400 (từ/giống như MU-300-10 Diamond II)' . 50 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ác câu lệnh CREATE TABLE, bạn nên chạy các câu lệnh INSERT theo thứ tự được chỉ định ở đây để không vi phạm khóa ngoại được xác định trên bảng airplanes

Tạo một thủ tục được lưu trữ trong MySQL

Để xây dựng thủ tục lưu trữ trong MySQL, bạn phải sử dụng câu lệnh CREATE CALL2. Để bắt đầu, hãy mở một cửa sổ truy vấn mới trong Workbench và đảm bảo rằng cơ sở dữ liệu đích đang hoạt động. (Để kích hoạt cơ sở dữ liệu, bấm đúp vào cơ sở dữ liệu trong Bộ điều hướng hoặc chạy câu lệnh CALL3. ) Đối với ví dụ này, bạn sẽ sử dụng cơ sở dữ liệu travel

Khi xây dựng câu lệnh CREATE CALL2 của bạn, bạn phải cung cấp tên cho thủ tục và chỉ định quy trình SQL mà bạn muốn duy trì cơ sở dữ liệu của mình. Quy trình có thể bao gồm một câu lệnh SQL đơn lẻ chẳng hạn như CALL7 hoặc CALL8 hoặc nó có thể là một câu lệnh phức hợp. Câu lệnh ghép là câu lệnh sử dụng cú pháp CALL9 để bao quanh một khối gồm một hoặc nhiều câu lệnh SQL. Khối có thể bao gồm nhiều phần tử ngôn ngữ SQL, bao gồm các câu lệnh DDL và DML, khai báo biến, khối nhúng hoặc cấu trúc điều khiển luồng chẳng hạn như vòng lặp hoặc kiểm tra có điều kiện

Hầu hết các thủ tục được lưu trữ đều sử dụng câu lệnh phức hợp ngay cả khi chúng chỉ bao gồm một câu lệnh SQL duy nhất. Ví dụ: quy trình trong câu lệnh CREATE CALL2 sau đây bao gồm một câu lệnh ghép chỉ có một câu lệnh CALL7

1

2

3

4

5

6

7

8

9

10

11

12

13

14

DÒNG KHÁC //

TẠO THỦ TỤC get_plane_info()

BẮT ĐẦU

  CHỌN a. manufacturer_id, m. nhà sản xuất,

    ĐẾM(*) AS plane_count,

    VÒNG(AVG(a.sải cánh), 2) AS avg_span,

    VÒNG(AVG(a.plane_length), 2) AS avg_length

  TỪ máy bay a BÊN TRONG JOIN manufacturers m

    BẬT a. manufacturer_id = m. nhà sản xuất_id

  NHÓM BỞI a. nhà sản xuất_id

  ĐẶT HÀNG BỞI m. nhà sản xuất;

END//

  

DÒNG KHÁC ;

Ví dụ tạo một thủ tục tên là travel3. Lưu ý rằng một tập hợp các dấu ngoặc đơn sau tên. Nếu câu lệnh bao gồm các tham số đầu vào hoặc đầu ra, thì chúng sẽ được xác định trong dấu ngoặc đơn (mà tôi sẽ trình bày sau trong bài viết). Nếu bạn không bao gồm tham số, bạn vẫn phải cung cấp dấu ngoặc đơn

Câu lệnh ghép được xác định bởi cú pháp CALL9, bao quanh câu lệnh đơn CALL7. Bản thân câu lệnh CALL7 sẽ tham gia vào các bảng airplanesmanufacturers, nhóm dữ liệu theo cột travel9 trong bảng airplanes và tính toán các giá trị trung bình của travel1 và travel2 cho mỗi nhà sản xuất. Tuyên bố cũng sắp xếp các kết quả theo nhà sản xuất và cung cấp tổng số mô hình máy bay cho mỗi mô hình. (Chúng tôi sẽ đề cập đến tất cả các yếu tố tuyên bố này chi tiết hơn ở phần sau của loạt bài này. )

Như bạn có thể thấy, tạo một thủ tục lưu sẵn đơn giản là một quá trình khá đơn giản. Ở mức tối thiểu, bạn phải cung cấp tên và nội dung quy trình. Tuy nhiên, chắc chắn bạn đã chú ý đến việc bao gồm hai câu lệnh travel3 bao quanh định nghĩa thủ tục

Theo mặc định, MySQL sử dụng dấu chấm phẩy (;) làm dấu phân cách câu lệnh. Điều này giúp đảm bảo rằng máy khách gửi toàn bộ câu lệnh đến máy chủ mà không nhầm lẫn nó với các câu lệnh khác. Tuy nhiên, một câu lệnh ghép trong một thủ tục được lưu trữ có thể bao gồm một hoặc nhiều dấu phân cách, ngoài dấu phân cách cuối cùng của định nghĩa và tất cả các dấu phân cách này có thể gây nhầm lẫn khi chuyển câu lệnh CREATE ________0____2 từ máy khách đến máy chủ

Để giải quyết vấn đề này, MySQL hỗ trợ sử dụng câu lệnh travel3, cho phép bạn tạm thời thay đổi dấu phân cách để bạn có thể chuyển toàn bộ định nghĩa quy trình tới máy chủ dưới dạng một câu lệnh. Trong ví dụ trên, câu lệnh travel3 đầ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 travel3 thứ hai thay đổi dấu phân cách trở lại dấu chấm phẩy. Sau đó, dấu phân cách tạm thời được sử dụng ở cuối câu lệnh CREATE CALL2 (sau từ khóa airplanes1), nhưng bản thân câu lệnh CALL7 vẫn được kết thúc bằng dấu chấm phẩy

Tôi cũng muốn chỉ ra rằng MySQL Workbench cung cấp một công cụ (ở dạng tab) để tạo và chỉnh sửa các thủ tục được lưu trữ. Công cụ này tương tự như công cụ được sử dụng để tạo và chỉnh sửa chế độ xem. Nó cung cấp một sơ khai để xây dựng một tuyên bố CREATE CALL2 nhưng để bạn điền thông tin chi tiết. Hình 1 hiển thị tab Thủ tục lưu trữ khi nó xuất hiện khi bạn khởi chạy nó lần đầu trong Workbench

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Hình 1. Thêm một thủ tục được lưu trữ thông qua GUI Workbench

Để khởi chạy tab Thủ tục được lưu trữ, hãy chọn cơ sở dữ liệu đích trong Bộ điều hướng và sau đó nhấp vào nút tạo thủ tục được lưu trữ trên thanh công cụ Workbench. (Nút này bao gồm chú giải công cụ Tạo một thủ tục được lưu trữ mới trong sơ đồ đang hoạt động trong máy chủ được kết nối. ) Khi tab Thủ tục được lưu trữ xuất hiện, bạn có thể bắt đầu xây dựng câu lệnh của mình. Sau khi bạn hoàn thành, nhấp vào Áp dụng. MySQL sau đó sẽ thêm một vài thành phần câu lệnh cần thiết để tạo thủ tục. Xem lại tập lệnh cuối cùng, bấm Áp dụng một lần nữa rồi bấm Kết thúc. Thủ tục được lưu trữ sẽ được thêm vào cơ sở dữ liệu đích

Tab Quy trình được lưu trữ có thể hữu ích để tạo và chỉnh sửa quy trình được lưu trữ, vì vậy tôi muốn chắc chắn rằng bạn biết nó có sẵn. Tuy nhiên, tôi thích sử dụng tab truy vấn hơn khi làm việc với thủ tục lưu trữ vì tôi nghĩ rằng nó dễ dàng hơn và tiết kiệm các bước, vì vậy đây là cách tiếp cận mà tôi áp dụng cho các ví dụ trong bài viết này

Xác minh một thủ tục được lưu trữ mới được tạo

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

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Hình 2. Xem thủ tục được lưu trữ trong Bộ điều hướng

Từ Bộ điều hướng, bạn có thể mở định nghĩa quy trình trong tab Quy trình được lưu trữ bằng cách nhấp vào biểu tượng cờ lê bên cạnh tên quy trình. Hình 3 hiển thị định nghĩa thủ tục khi bạn tạo nó, ngoại trừ một điểm khác biệt. Bây giờ nó bao gồm mệnh đề airplanes8 sau từ khóa CREATE

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Hình 3. Xem định nghĩa quy trình trên tab Quy trình được lưu trữ

Mệnh đề airplanes8 chỉ định tài khoản nào đã được chỉ định là người tạo thủ tục. Bởi vì tôi đã tạo thủ tục được lưu trữ trong tài khoản manufacturers1 trên phiên bản MySQL cục bộ của mình, đó 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 đã thực thi câu lệnh CREATE CALL2, 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

Khác với mệnh đề airplanes8, định nghĩa thủ tục được lưu trữ của bạn sẽ giống như những gì bạn đã tạo, ngoại trừ việc không có câu lệnh travel3 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 trên tab Quy trình được lưu trữ và nhấp vào Áp dụng, Workbench sẽ thêm các thành phần đó cho bạn

Một cách khác để xác minh xem thủ tục được lưu trữ của bạn đã được tạo hay chưa là truy vấn chế độ xem manufacturers6 trong cơ sở dữ liệu manufacturers7

1

2

CHỌN * TỪ lược đồ thông tin. quy trình

WHERE routine_schema = 'du lịch';

Tuyên bố bao gồm một mệnh đề manufacturers8 giới hạn kết quả trong cơ sở dữ liệu travel. Mọi thủ tục (thủ tục hoặc chức năng được lưu trữ) đã được tạo trong cơ sở dữ liệu sẽ được truy vấn này trả về

Bạn có thể giới hạn kết quả hơn nữa bằng cách chỉ định tên thủ tục trong mệnh đề manufacturers8 và bằng cách chỉ định cột hoặc các cột sẽ trả về. Ví dụ: câu lệnh CALL7 sau giới hạn kết quả ở cột INSERT2 và thủ tục travel3 trong cơ sở dữ liệu travel

1

2

3

4

CHỌN routine_definition

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

WHERE routine_schema = 'travel'

   routine_name = 'get_plane_info';

Mặc dù câu lệnh chỉ trả về một giá trị duy nhất, nhưng nó vẫn có thể khó đọc, đặc biệt nếu đó là một câu lệnh ghép phức tạp. Để xem toàn bộ câu lệnh, hãy 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. Chọn Văn bản nếu nó chưa được chọn. MySQL khởi chạy một cửa sổ riêng hiển thị giá trị, như trong Hình 4

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

hinh 4. Kiểm tra phần thân quy trình của thủ tục được lưu trữ trong Trình xem

Tất nhiên, việc xác minh rằng quy trình được lưu trữ tồn tại không cho bạn biết liệu nó có hoạt động như mong đợi hay không. Vì lý do này, bạn cũng nên thực hiện quy trình và xem nó trả về loại kết quả nào (ngoài việc chạy nó qua một chu kỳ QA phù hợp). Đối với điều này, hãy sử dụng câu lệnh CALL chỉ định tên thủ tục, như trong ví dụ sau

1

GỌI get_plane_info;

Khi bạn gọi thủ tục, MySQL sẽ chạy thủ tục được lưu trữ và trả về kết quả câu lệnh, được hiển thị trong Hình 5

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Hình 5. Xem kết quả sau khi gọi thủ tục lưu sẵn

Như mong đợi, câu lệnh CALL trả về dữ liệu máy bay tổng hợp, được nhóm theo nhà sản xuất. Đây là những kết quả tương tự mà bạn sẽ nhận được nếu bạn chạy trực tiếp câu lệnh CALL7 của quy trình. Tuy nhiên, câu lệnh hiện được duy trì trong cơ sở dữ liệu, loại bỏ nhu cầu viết câu lệnh ở cấp ứng dụng

Thêm một tham số đầu vào vào một thủ tục được lưu trữ

Thủ tục lưu trữ travel3 được tạo trong phần trước đã trình bày hầu hết các thành phần chính đi vào thủ tục lưu trữ MySQL. Trong môi trường sản xuất, câu lệnh ghép có thể sẽ phức tạp hơn, nhưng ví dụ này vẫn cung cấp hầu hết những điều cơ bản. Điều đó nói rằng, một trong những khía cạnh có lợi nhất của thủ tục được lưu trữ là khả năng hỗ trợ các tham số đầu vào và đầu ra

Trong phần này, tôi trình bày cách thêm tham số đầu vào vào định nghĩa thủ tục. (Tôi sẽ đề cập đến các tham số đầu ra trong phần tiếp theo. ) Trước khi tôi đi sâu vào vấn đề đó, bạn nên lưu ý rằng bạn không thể đơn giản thay đổi định nghĩa thủ tục giống như bạn có thể thay đổi định nghĩa bảng hoặc dạng xem. Bạn có thể sửa đổi các đặc điểm của thủ tục, nhưng không có gì khác. Để thực hiện bất kỳ cập nhật quan trọng nào, bạn phải bỏ quy trình rồi tạo lại quy trình đó, kết hợp mọi yếu tố mới

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

1

THẢI THỦ TỤC NẾU TỒN TẠI get_plane_info;

Mệnh đề CREATE1 CREATE2 là tùy chọn, nhưng nó có thể giúp tránh những lỗi không cần thiết. Sau khi bạn chạy câu lệnh này, bạn có thể xác nhận rằng quy trình đã bị loại bỏ bằng cách truy vấn lại chế độ xem manufacturers6 trong cơ sở dữ liệu manufacturers7

1

2

CHỌN * TỪ lược đồ thông tin. quy trình

WHERE routine_schema = 'du lịch';

Bây giờ, câu lệnh sẽ trả về một tập kết quả trống, trừ khi bạn đã tạo các hàm hoặc thủ tục được lưu trữ khác

Sau khi bạn xóa thủ tục được lưu trữ travel3, bạn có thể cập nhật câu lệnh CREATE CALL2 của mình để bao gồm một tham số đầu vào. Đối với mỗi tham số, bạn nên chỉ định loại tham số, tên tham số và kiểu dữ liệu của tham số. MySQL hỗ trợ ba loại tham số

  • TRONG. Tham số đầu vào chuyển một giá trị từ trình gọi vào quy trình của thủ tục
  • NGOÀI. Tham số đầu ra chuyển một giá trị từ thường trình trở lại người gọi
  • ĐẦU VÀO. Tham số có thể được khởi tạo bởi người gọi, được cập nhật bởi thường trình và sau đó được trả lại cho người gọi với giá trị mới của nó

Câu lệnh CREATE CALL2 sau đây bao gồm một tham số đầu vào, được đặt tên là TABLE0 và được xác định bằng kiểu dữ liệu TABLE1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

DÒNG KHÁC //

TẠO THỦ TỤC get_plane_info(

  IN in_name VARCHAR(50))

COMMENT 'truy xuất thông tin tổng hợp về máy bay'

BẮT ĐẦU

  CHỌN a. manufacturer_id, m. nhà sản xuất,

    ĐẾM(*) AS plane_count,

    VÒNG(AVG(a.sải cánh), 2) AS avg_span,

    VÒNG(AVG(a.plane_length), 2) AS avg_length

  TỪ máy bay a BÊN TRONG JOIN manufacturers m

    BẬT a. manufacturer_id = m. nhà sản xuất_id

  Ở ĐÂU m. nhà sản xuất = in_name;

END//

DÒNG KHÁC ;

Định nghĩa tham số được đặt trong ngoặc đơn và bao gồm từ khóa TABLE2, tên tham số và kiểu dữ liệu. Tôi cũng đã cập nhật câu lệnh CALL7 để phản ánh việc sử dụng tham số. Nó không còn bao gồm các mệnh đề TABLE4 TABLE5 và TABLE6 TABLE5 mà hiện bao gồm một mệnh đề manufacturers8 so sánh tham số TABLE0 với cột INSERT0. Bằng cách này, người gọi có thể chỉ định nhà sản xuất làm cơ sở truy vấn

Câu lệnh CREATE CALL2 cũng bao gồm đặc tính INSERT3, bổ sung nhận xét cho định nghĩa thủ tục. Bạn có thể bao gồm một hoặc nhiều đặc điểm trong câu lệnh CREATE CALL2 sau các định nghĩa tham số. Một đặc điểm là một trong số các tùy chọn có thể được thêm vào định nghĩa thủ tục. Mỗi đặc điểm ảnh hưởng đến định nghĩa thủ tục theo một cách khác nhau. Ví dụ: đặc điểm này thêm nhận xét nhưng bạn cũng có thể sử dụng các đặc điểm để biểu thị ngôn ngữ quy trình, chỉ định xem quy trình có mang tính quyết định hay không hoặc xác định bản chất của quy trình

Khi gọi thủ tục lưu trữ nhận tham số đầu vào, bạn phải bao gồm giá trị tham số trong dấu ngoặc đơn. Nếu đó là một giá trị ký tự, bạn phải đặt nó trong dấu nháy đơn. Ví dụ: câu lệnh CALL sau chỉ định INSERT7 làm giá trị cho tham số đầu vào của thủ tục

1

GỌI get_plane_info ('piper');

Khi MySQL chạy quy trình của thủ tục, nó sẽ thay thế giá trị INSERT7 cho tham số TABLE0 được chỉ định trong mệnh đề manufacturers8. Hình 6 hiển thị các kết quả hiện được trả về bởi thủ tục được lưu trữ

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Hình 6. Gọi một thủ tục được lưu trữ với một tham số đầu vào

Khi xác định thủ tục được lưu trữ của bạn, bạn có thể bao gồm nhiều tham số TABLE2, phân tách chúng bằng dấu phẩy. Sau đó, khi bạn gọi thủ tục, bạn chỉ định từng giá trị tham số trong dấu ngoặc đơn, lại được phân tách bằng dấu phẩy. Bạn cũng có thể bao gồm tham số CALL02 hoặc tham số CALL03 cùng với tham số đầu vào

Thêm tham số đầu ra vào một thủ tục được lưu trữ

Bây giờ hãy xem cách thêm nhiều tham số CALL02 vào thủ tục lưu sẵn travel3. Tham số đầu ra cung cấp một cơ chế để trả lại một hoặc nhiều giá trị cho người gọi, thay vì trả về một tập hợp kết quả duy nhất. Đối với ví dụ này, bạn sẽ thêm năm tham số đầu ra, tương ứng với các cột được chỉ định trong danh sách CALL7 của quy trình

Để thêm các tham số, bạn sẽ cần bỏ quy trình một lần nữa và sau đó chạy câu lệnh CREATE CALL2 đã cập nhật. Các tham số đầu ra được chỉ định trong cùng một dấu ngoặc đơn với tham số đầu vào, như được hiển thị trong tập lệnh sau

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

THẢI THỦ TỤC NẾU TỒN TẠI get_plane_info;

DÒNG KHÁC //

TẠO THỦ TỤC get_plane_info(

  IN in_name VARCHAR(50),

  OUT out_id INT CHƯA KÝ,

  OUT out_name VARCHAR(50),

  OUT plane_count SMALLINT KHÔNG ĐƯỢC KÝ,

  OUT avg_wingspan DECIMAL(5,2),

  OUT avg_length DECIMAL(5,2))

COMMENT 'truy xuất thông tin tổng hợp về máy bay'

BẮT ĐẦU

  CHỌN a. manufacturer_id, m. nhà sản xuất,

    ĐẾM(*),

    VÒNG(AVG(a.sải cánh), 2),

    VÒNG(AVG(a.plane_length), 2)

  VÀO out_id, out_name, plane_count, avg_wingspan, avg_length

  TỪ máy bay a BÊN TRONG JOIN manufacturers m

    BẬT a. manufacturer_id = m. nhà sản xuất_id

  Ở ĐÂU m. nhà sản xuất = in_name;

END//

DÒNG KHÁC ;

Đối với mỗi tham số đầu ra, bạn phải chỉ định từ khóa CALL02, tên tham số và kiểu dữ liệu của tham số. Ngoài ra, bạn phải thêm mệnh đề CALL10 sau danh sách CALL7 trả về kết quả cho các tham số đầu ra. Tôi cũng đã xóa bí danh cột khỏi danh sách CALL7 vì chúng không còn cần thiết nữa

Khi bạn gọi một thủ tục được lưu trữ trả về các tham số đầu ra, bạn có thể nắm bắt các giá trị tham số đó bằng cách chuyển vào một biến do người dùng xác định để mỗi tham số đầu ra giữ giá trị của nó, như được hiển thị trong câu lệnh CALL sau đây

1

2

GỌI get_plane_info ('beechcraft', @out_id, @out_name,

  @plane_count, @avg_wingspan, @avg_length);

Câu lệnh CALL chỉ định CALL15 làm giá trị tham số đầu vào. Tiếp theo là năm biến do người dùng xác định, tương ứng với các tham số được chỉ định trong định nghĩa thủ tục được lưu trữ. Khi bạn chạy câu lệnh CALL, các giá trị tham số trả về được gán cho các biến

Cách chính xác mà bạn sẽ xử lý các tham số đầu ra trong ứng dụng của mình sẽ phụ thuộc vào ngôn ngữ lập trình mà bạn đang sử dụng. Trong thời gian chờ đợi, bạn có thể xác minh rằng các biến của mình chứa các giá trị dự kiến ​​bằng cách chạy câu lệnh CALL7 tương tự như sau

1

SELECT @out_id, @out_name, @plane_count, @avg_wingspan, @avg_length;

Hình 7 cho thấy kết quả trả về của câu lệnh CALL7

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Hình 7. Xem các giá trị tham số đầu ra của thói quen cho các mặt phẳng Beechcraft

Hình này cho thấy kết quả khi bạn chỉ định CALL15 làm giá trị đầu vào khi gọi thủ tục lưu sẵn. Nếu bạn chỉ định một giá trị khác, chẳng hạn như CALL20, thì câu lệnh CALL7 của bạn sẽ trả về nhiều kết quả khác nhau, như thể hiện trong Hình 8

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Hình 8. Xem các giá trị thông số đầu ra của quy trình cho các máy bay Airbus

Cả hai tham số TABLE2 và CALL02 đều có thể làm cho các thủ tục được lưu trữ trở nên linh hoạt hơn nhiều khi hỗ trợ các ứng dụng dựa trên dữ liệu. Bạn cũng có thể gặp các tình huống khi muốn sử dụng tham số CALL03. Ví dụ: bạn có thể tạo một thủ tục được lưu trữ bao gồm một số loại bộ đếm. Bạn có thể sử dụng tham số CALL03 để đặt giá trị ban đầu của bộ đếm và sau đó trả về giá trị bộ đếm mới dựa trên đầu ra của quy trình

Thay đổi một thủ tục được lưu trữ trong MySQL

MySQL hỗ trợ câu lệnh CALL26 CALL2 để cập nhật các đặc điểm của thủ tục. Bạn không thể sử dụng câu lệnh này để thực hiện bất kỳ thay đổi nào khác đối với định nghĩa thủ tục. Bạn chỉ bị giới hạn ở các đặc điểm. Ví dụ: câu lệnh CALL26 CALL2 sau đây thêm hai đặc điểm vào định nghĩa thủ tục, nhưng phần còn lại của định nghĩa thủ tục sẽ không thay đổi

1

2

3

THAY ĐỔI THỦ TỤC get_plane_info

ĐỌC SQL DỮ LIỆU

SQL BẢO MẬT INVOKER;

Đặc tính CALL30 CALL31 CALL32 chỉ ra rằng quy trình bao gồm các câu lệnh đọc dữ liệu. Loại đặc điểm này chỉ mang tính chất tư vấn và không hạn chế thói quen theo bất kỳ cách nào. Đặc tính CALL31 CALL34 CALL35 chỉ ra rằng quy trình sẽ chạy trong ngữ cảnh bảo mật của tài khoản người dùng gọi quy trình chứ không phải tài khoản định nghĩa

Sau khi bạn chạy câu lệnh CALL26 CALL2, 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 thủ tục trên tab Thủ tục được lưu trữ, được hiển thị trong Hình 9

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Hình 9. Xem định nghĩa quy trình trên tab Quy trình được lưu trữ

Lưu ý rằng câu lệnh CREATE CALL2 hiện bao gồm ba đặc điểm. hai đặc điểm bạn vừa thêm và đặc điểm gốc INSERT3 mà bạn đã thêm trước đó

Làm việc với thủ tục lưu sẵn trong MySQL

Các thủ tục được lưu trữ có thể mang lại rất nhiều tính linh hoạt, đồng thời giúp hợp lý hóa việc phát triển ứng dụng. Tuy nhiên, một thủ tục chỉ có hiệu quả như thủ tục cơ bản của nó và các câu lệnh SQL mà nó chứa. Trong bài tập này, tôi đã chỉ cho bạn cách tạo một thủ tục lưu trữ có thủ tục chứa một câu lệnh CALL7 duy nhất, nhưng bạn có thể xây dựng các thủ tục xác định logic phức tạp hơn nhiều. Ở phần sau của loạt bài này, tôi sẽ trình bày cách tạo các câu lệnh phức hợp mạnh mẽ hơn mà bạn có thể xây dựng trong các thủ tục được lưu trữ của mình hoặc sử dụng cho các loại truy vấn khác

 

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Robert Sheldon 07 Tháng mười 2022

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu 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

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu mysql

Lukas Vileikis 31 tháng một 2023

Cái nào sau đây được sử dụng để gọi thủ tục này trong cơ sở dữ liệu 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

Làm thế nào để gọi một thủ tục trong MySQL?

Chúng ta có thể sử dụng câu lệnh CALL để gọi thủ tục lưu sẵn. Câu lệnh này trả về các giá trị cho người gọi nó thông qua các tham số của nó (IN, OUT hoặc INOUT). Cú pháp sau đây được sử dụng để gọi thủ tục được lưu trữ trong MySQL. GỌI tên thủ tục ((các) tham số)

Cái gì được sử dụng để gọi thủ tục cơ sở dữ liệu?

CallableStatement của API JDBC được sử dụng để gọi một thủ tục được lưu trữ. Câu lệnh Callable có thể có tham số đầu ra, tham số đầu vào hoặc cả hai.

Thủ tục trong cơ sở dữ liệu MySQL là gì?

Một thủ tục là một chương trình con (như chương trình con) bằng ngôn ngữ kịch bản thông thường, được lưu trữ trong cơ sở dữ liệu . Trong trường hợp của MySQL, các thủ tục được viết bằng MySQL và được lưu trữ trong cơ sở dữ liệu/máy chủ MySQL. Một thủ tục MySQL có tên, danh sách tham số và (các) câu lệnh SQL.

Lệnh nào dùng để gọi một thủ tục trong SQL Server?

Lệnh EXEC được sử dụng để thực thi một thủ tục được lưu trữ hoặc một chuỗi SQL được truyền cho nó.