Cải thiện bài viết Show Lưu bài viết Tuyên bố chức năng tạo được sử dụng để tạo chức năng được lưu trữ và các hàm do người dùng xác định. Hàm được lưu trữ là một tập hợp các câu lệnh SQL thực hiện một số hoạt động và trả về một giá trị duy nhất.CREATE FUNCTION statement is used for creating a stored function and user-defined functions. A stored function is a set of SQL statements that perform some operation and return a single value. Giống như hàm được xây dựng của MySQL, nó có thể được gọi từ trong câu lệnh MySQL. Theo mặc định, hàm được lưu trữ được liên kết với cơ sở dữ liệu mặc định. Tuyên bố chức năng tạo yêu cầu tạo đặc quyền cơ sở dữ liệu thường xuyên.CREATE FUNCTION statement require CREATE ROUTINE database privilege. Cú pháp: & nbsp; Cú pháp để tạo câu lệnh chức năng trong mysql là: & nbsp; & nbsp; CREATE FUNCTION function_name(func_parameter1, func_parameter2, ..) RETURN datatype [characteristics] func_body Các tham số được sử dụng:
Func_body là tập hợp các câu lệnh MySQL thực hiện hoạt động. Cấu trúc của nó như sau: is the set of Mysql statements that perform operation. It’s structure is as follows: BEGIN Mysql Statements RETURN expression; END Cơ quan chức năng phải chứa một câu lệnh trả về. & Nbsp; & nbsp; Example: Xem xét bảng nhân viên sau-
Robert DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ; Tvler Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee; Output:
13.1.17 & nbsp; Tạo quy trình và tạo các câu lệnh chức năng
Các câu lệnh này được sử dụng để tạo ra một thói quen được lưu trữ (một quy trình hoặc chức năng được lưu trữ). Đó là, thói quen được chỉ định được biết đến với máy chủ. Theo mặc định, một thói quen được lưu trữ được liên kết với cơ sở dữ liệu mặc định. Để liên kết rõ ràng một cách rõ ràng với một cơ sở dữ liệu đã cho, chỉ định tên là Câu lệnh BEGIN Mysql Statements RETURN expression; END0 cũng được sử dụng trong MySQL để hỗ trợ các chức năng có thể tải. Xem Phần & NBSP; 13.7.4.1, Tạo câu lệnh Chức năng cho các chức năng tải. Một hàm có thể tải có thể được coi là một hàm được lưu trữ bên ngoài. Các chức năng được lưu trữ chia sẻ không gian tên của họ với các chức năng có thể tải. Xem Phần & NBSP; 9.2.5, Phân tích tên chức năng và độ phân giải của Hồi giáo, cho các quy tắc mô tả cách máy chủ diễn giải các tham chiếu đến các loại chức năng khác nhau. Để gọi một quy trình được lưu trữ, hãy sử dụng câu lệnh BEGIN Mysql Statements RETURN expression; END1 (xem Phần & NBSP; 13.2.1, Tuyên bố cuộc gọi của Hồi giáo). Để gọi một chức năng được lưu trữ, hãy tham khảo nó trong một biểu thức. Hàm trả về một giá trị trong quá trình đánh giá biểu thức.
BEGIN Mysql Statements RETURN expression; END2 và BEGIN Mysql Statements RETURN expression; END0 yêu cầu đặc quyền BEGIN Mysql Statements RETURN expression; END4. Nếu điều khoản BEGIN Mysql Statements RETURN expression; END5 có mặt, các đặc quyền cần thiết phụ thuộc vào giá trị BEGIN Mysql Statements RETURN expression; END6, như đã thảo luận trong Phần & NBSP; 25.6, điều khiển truy cập đối tượng được lưu trữ. Nếu ghi nhật ký nhị phân được bật, BEGIN Mysql Statements RETURN expression; END0 có thể yêu cầu đặc quyền BEGIN Mysql Statements RETURN expression; END8, như được thảo luận trong Phần & NBSP; 25.7, chương trình lưu trữ của chương trình đăng nhập nhị phân. Theo mặc định, MySQL tự động cấp cho các đặc quyền BEGIN Mysql Statements RETURN expression; END9 và DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;0 cho người tạo thông thường. Hành vi này có thể được thay đổi bằng cách vô hiệu hóa biến hệ thống DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;1. Xem Phần & NBSP; 25.2.2, Các thói quen được lưu trữ và đặc quyền MySQL. Các điều khoản BEGIN Mysql Statements RETURN expression; END5 và DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;3 chỉ định bối cảnh bảo mật sẽ được sử dụng khi kiểm tra các đặc quyền truy cập tại thời gian thực hiện thông thường, như được mô tả sau trong phần này. Nếu tên thông thường giống như tên của hàm SQL tích hợp, lỗi cú pháp xảy ra trừ khi bạn sử dụng khoảng trống giữa tên và dấu ngoặc đơn sau khi xác định thói quen hoặc gọi nó sau. Vì lý do này, tránh sử dụng tên của các hàm SQL hiện có cho các thói quen được lưu trữ của riêng bạn. Chế độ DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;4 SQL áp dụng cho các chức năng tích hợp, không phải cho các thói quen được lưu trữ. Luôn luôn được phép có không gian sau một tên thường xuyên được lưu trữ, bất kể DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;4 có được bật hay không.
DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;6 Ngăn chặn lỗi xảy ra nếu đã tồn tại một thói quen có cùng tên. Tùy chọn này được hỗ trợ với cả BEGIN Mysql Statements RETURN expression; END0 và BEGIN Mysql Statements RETURN expression; END2 bắt đầu bằng MySQL 8.0,0,29. Nếu một hàm tích hợp có cùng tên đã tồn tại, cố gắng tạo ra một hàm được lưu trữ với DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;9 thành công với cảnh báo cho thấy nó có cùng tên với hàm gốc; Điều này không khác gì khi thực hiện cùng một câu lệnh Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;0 mà không chỉ định Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;1. Nếu một hàm có thể tải có cùng tên đã tồn tại, cố gắng tạo chức năng được lưu trữ bằng cách sử dụng Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;1 thành công với cảnh báo. Điều này giống như không chỉ định DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;6. Xem độ phân giải tên chức năng, để biết thêm thông tin. Danh sách tham số được đặt trong ngoặc đơn phải luôn luôn có mặt. Nếu không có tham số, nên sử dụng danh sách tham số trống của Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;4. Tên tham số không nhạy cảm trường hợp. Mỗi tham số là một tham số Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;5 theo mặc định. Để chỉ định khác cho một tham số, hãy sử dụng từ khóa Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;6 hoặc Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;7 trước tên tham số. Ghi chú Chỉ định một tham số là Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;5, Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;6 hoặc Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;7 chỉ có giá trị đối với 1. Đối với 2, các tham số luôn được coi là các tham số Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;5. Một tham số Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;5 chuyển một giá trị vào một thủ tục. Quy trình có thể sửa đổi giá trị, nhưng việc sửa đổi không hiển thị cho người gọi khi thủ tục trả về. Một tham số Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;6 chuyển một giá trị từ quy trình trở lại người gọi. Giá trị ban đầu của nó là 6 trong quy trình và giá trị của nó được hiển thị cho người gọi khi thủ tục trả về. Một tham số Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;7 được người gọi khởi tạo, có thể được sửa đổi theo quy trình và bất kỳ thay đổi nào được thực hiện bởi quy trình đều có thể nhìn thấy cho người gọi khi thủ tục trả về. Đối với mỗi tham số Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;6 hoặc Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;7, hãy truyền một biến do người dùng xác định trong câu lệnh BEGIN Mysql Statements RETURN expression; END1 gọi quy trình để bạn có thể nhận được giá trị của nó khi thủ tục trả về. Nếu bạn đang gọi quy trình từ trong một quy trình hoặc chức năng được lưu trữ khác, bạn cũng có thể truyền một tham số thường quy hoặc biến thường xuyên cục bộ dưới dạng tham số Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;6 hoặc Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;7. Nếu bạn đang gọi quy trình từ trong một kích hoạt, bạn cũng có thể vượt qua 3 dưới dạng tham số Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;6 hoặc Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;7. Để biết thông tin về ảnh hưởng của các điều kiện chưa được xử lý đối với các tham số thủ tục, xem Phần & NBSP; 13.6.7.8, Xử lý điều kiện và ra các tham số hoặc ra các tham số. Các tham số thông thường không thể được tham chiếu trong các câu lệnh được chuẩn bị trong thói quen; Xem Phần & NBSP; 25.8, Hạn chế trên các chương trình được lưu trữ. Ví dụ sau đây cho thấy một quy trình được lưu trữ đơn giản, được đưa ra một mã quốc gia, đếm số lượng thành phố cho quốc gia đó xuất hiện trong bảng 6 của cơ sở dữ liệu 7. Mã quốc gia được truyền bằng tham số Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;5 và số lượng thành phố được trả về bằng tham số Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;6:
Ví dụ sử dụng lệnh MySQL Client 0 để thay đổi dấu phân cách câu lệnh từ 1 thành 2 trong khi quy trình đang được xác định. Điều này cho phép dấu phân cách 1 được sử dụng trong thân quy trình được truyền qua máy chủ thay vì được chính MySQL giải thích. Xem Phần & NBSP; 25.1, Xác định các chương trình được lưu trữ.mysql client 0 command to change the statement delimiter from 1 to 2 while the procedure is being defined. This enables the 1 delimiter used in the procedure body to be passed through to the server rather than being interpreted by mysql itself. See Section 25.1, “Defining Stored Programs”. Điều khoản 4 chỉ có thể được chỉ định cho một 2, mà nó là bắt buộc. Nó chỉ ra loại trả về của hàm và thân hàm phải chứa câu lệnh 6. Nếu câu lệnh 7 trả về giá trị của một loại khác, giá trị bị ép theo loại thích hợp. Ví dụ: nếu một hàm chỉ định giá trị 8 hoặc 9 trong mệnh đề 4, nhưng câu lệnh 7 trả về một số nguyên, giá trị được trả về từ hàm là chuỗi cho thành viên 8 tương ứng của các thành viên 9.Hàm ví dụ sau đây có tham số, thực hiện thao tác bằng hàm SQL và trả về kết quả. Trong trường hợp này, việc sử dụng 0 là không cần thiết vì định nghĩa hàm không chứa dấu phân cách câu lệnh 1 nội bộ:
Các loại tham số và các loại trả về chức năng có thể được khai báo để sử dụng bất kỳ loại dữ liệu hợp lệ nào. Thuộc tính 6 có thể được sử dụng nếu có trước thông số kỹ thuật 7.
8 bao gồm một tuyên bố thường xuyên SQL hợp lệ. Đây có thể là một tuyên bố đơn giản như 9 hoặc 0 hoặc một câu lệnh ghép được viết bằng cách sử dụng 1 và 2. Các câu lệnh ghép có thể chứa các tuyên bố, vòng lặp và các câu lệnh cấu trúc kiểm soát khác. Cú pháp cho các câu lệnh này được mô tả trong Phần & NBSP; 13.6, Syntax của Tuyên bố Hợp chất. Trong thực tế, các chức năng được lưu trữ có xu hướng sử dụng các câu lệnh ghép, trừ khi cơ thể bao gồm một câu 7 duy nhất.MySQL cho phép các thói quen chứa các câu lệnh DDL, chẳng hạn như 4 và 5. MySQL cũng cho phép các quy trình được lưu trữ (nhưng không được lưu trữ các chức năng) để chứa các báo cáo giao dịch SQL như 6. Các chức năng được lưu trữ có thể không chứa các câu lệnh thực hiện cam kết hoặc rollback rõ ràng. Hỗ trợ cho các tuyên bố này không được yêu cầu bởi tiêu chuẩn SQL, trong đó nêu rõ rằng mỗi nhà cung cấp DBMS có thể quyết định có nên cho phép chúng hay không.Các câu lệnh trả về một tập kết quả có thể được sử dụng trong một quy trình được lưu trữ nhưng không nằm trong hàm được lưu trữ. Sự cấm đoán này bao gồm các tuyên bố 9 không có mệnh đề 8 và các tuyên bố khác như 9, db_name.sp_name 0 và db_name.sp_name 1. Đối với các câu lệnh có thể được xác định tại thời gian định nghĩa chức năng để trả về một tập kết quả, xảy ra lỗi db_name.sp_name 2 (db_name.sp_name 3). Đối với các câu lệnh chỉ có thể được xác định trong thời gian chạy để trả về một tập kết quả, xảy ra lỗi db_name.sp_name 4 (db_name.sp_name 5). Để biết thêm thông tin về các tuyên bố không được phép trong các thói quen được lưu trữ, xem Phần & NBSP; 25.8, Hạn chế đối với các chương trình được lưu trữ. Để biết thông tin về việc gọi các quy trình được lưu trữ từ bên trong các chương trình được viết bằng ngôn ngữ có giao diện MySQL, xem Phần & NBSP; 13.2.1, Câu lệnh Call Call. MySQL lưu trữ cài đặt biến hệ thống Việc chuyển đổi từ chế độ SQL của Invoker sang phương thức thường xuyên xảy ra sau khi đánh giá các đối số và gán các giá trị kết quả cho các tham số thông thường. Nếu bạn xác định một thói quen ở chế độ SQL nghiêm ngặt nhưng gọi nó ở chế độ không thường xuyên, việc gán các đối số cho các tham số thông thường sẽ không diễn ra ở chế độ nghiêm ngặt. Nếu bạn yêu cầu các biểu thức được chuyển đến một thói quen được gán ở chế độ SQL nghiêm ngặt, bạn nên gọi thói quen có chế độ nghiêm ngặt có hiệu lực. Đặc tính BEGIN Mysql Statements RETURN expression; END00 và BEGIN Mysql Statements RETURN expression; END01. Đặc tính BEGIN Mysql Statements RETURN expression; END02 chỉ ra ngôn ngữ mà thói quen được viết. Máy chủ bỏ qua đặc tính này; Chỉ các thói quen SQL được hỗ trợ. Một thói quen được coi là xác định của người Viking nếu nó luôn tạo ra kết quả tương tự cho các tham số đầu vào tương tự và không phải là người xác định. Nếu cả BEGIN Mysql Statements RETURN expression; END03 và BEGIN Mysql Statements RETURN expression; END04 đều không được đưa ra trong định nghĩa thường quy, mặc định là BEGIN Mysql Statements RETURN expression; END05. Để tuyên bố rằng một hàm là xác định, bạn phải chỉ định rõ ràng ____103.“deterministic” if it always produces the same result for the same input parameters, and “not deterministic” otherwise. If neither BEGIN Mysql Statements RETURN expression; END03 nor BEGIN Mysql Statements RETURN expression; END04 is given in the routine definition, the default is BEGIN Mysql Statements RETURN expression; END05. To declare that a function is deterministic, you must specify BEGIN Mysql Statements RETURN expression; END03 explicitly. Đánh giá bản chất của một thói quen dựa trên sự trung thực của người Hồi giáo: MySQL không kiểm tra xem thông thường được tuyên bố BEGIN Mysql Statements RETURN expression; END03 không có tuyên bố tạo ra kết quả không. Tuy nhiên, việc xác nhận sai một thói quen có thể ảnh hưởng đến kết quả hoặc ảnh hưởng đến hiệu suất. Tuyên bố một thói quen không phải là BEGIN Mysql Statements RETURN expression; END03 có thể dẫn đến kết quả bất ngờ bằng cách khiến trình tối ưu hóa đưa ra các lựa chọn kế hoạch thực thi không chính xác. Tuyên bố một thói quen xác định là BEGIN Mysql Statements RETURN expression; END09 có thể làm giảm hiệu suất bằng cách gây ra các tối ưu hóa có sẵn không được sử dụng.“honesty” of the creator: MySQL does not check that a routine declared BEGIN Mysql Statements RETURN expression; END03 is free of statements that produce nondeterministic results. However, misdeclaring a routine might affect results or affect performance. Declaring a nondeterministic routine as BEGIN Mysql Statements RETURN expression; END03 might lead to unexpected results by causing the optimizer to make incorrect execution plan choices. Declaring a deterministic routine as BEGIN Mysql Statements RETURN expression; END09 might diminish performance by causing available optimizations not to be used. Nếu ghi nhật ký nhị phân được bật, đặc tính BEGIN Mysql Statements RETURN expression; END03 ảnh hưởng đến định nghĩa thông thường mà MySQL chấp nhận. Xem Phần & NBSP; 25.7, Chương trình lưu trữ của chương trình ghi nhật ký nhị phân. Một thói quen chứa hàm BEGIN Mysql Statements RETURN expression; END11 (hoặc từ đồng nghĩa của nó) hoặc BEGIN Mysql Statements RETURN expression; END12 là không có tính tự nhiên, nhưng nó vẫn có thể an toàn sao chép. Đối với BEGIN Mysql Statements RETURN expression; END11, nhật ký nhị phân bao gồm dấu thời gian và sao chép chính xác. BEGIN Mysql Statements RETURN expression; END12 cũng sao chép chính xác miễn là nó chỉ được gọi là một thời gian duy nhất trong quá trình thực hiện một thói quen. . Một số đặc điểm cung cấp thông tin về bản chất của việc sử dụng dữ liệu theo thói quen. Trong MySQL, những đặc điểm này chỉ là tư vấn. Máy chủ không sử dụng chúng để hạn chế loại câu lệnh nào được phép thực thi.
Đặc tính DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;3 có thể là BEGIN Mysql Statements RETURN expression; END5 hoặc BEGIN Mysql Statements RETURN expression; END26 để chỉ định bối cảnh bảo mật; Đó là, cho dù thường trình thực thi bằng cách sử dụng các đặc quyền của tài khoản có tên trong mệnh đề thường trình BEGIN Mysql Statements RETURN expression; END5 hay người dùng gọi nó. Tài khoản này phải có quyền truy cập cơ sở dữ liệu mà thói quen được liên kết. Giá trị mặc định là BEGIN Mysql Statements RETURN expression; END5. Người dùng gọi thói quen phải có đặc quyền DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;0 cho nó, như tài khoản BEGIN Mysql Statements RETURN expression; END5 nếu thường trình thực thi trong bối cảnh bảo mật của Definer. Điều khoản BEGIN Mysql Statements RETURN expression; END5 chỉ định tài khoản MySQL sẽ được sử dụng khi kiểm tra các đặc quyền truy cập tại thời gian thực hiện thông thường cho các thói quen có đặc tính BEGIN Mysql Statements RETURN expression; END32. Nếu mệnh đề BEGIN Mysql Statements RETURN expression; END5 có mặt, giá trị BEGIN Mysql Statements RETURN expression; END6 phải là tài khoản MySQL được chỉ định là ________ 135 '@' ________ 136 ', BEGIN Mysql Statements RETURN expression; END37 hoặc BEGIN Mysql Statements RETURN expression; END38. Các giá trị BEGIN Mysql Statements RETURN expression; END6 được phép phụ thuộc vào các đặc quyền bạn nắm giữ, như được thảo luận trong Phần & NBSP; 25.6, Điều khiển truy cập đối tượng được lưu trữ. Cũng xem phần đó để biết thêm thông tin về bảo mật thường xuyên được lưu trữ. Nếu mệnh đề BEGIN Mysql Statements RETURN expression; END5 bị bỏ qua, Deforer mặc định là người dùng thực thi câu lệnh BEGIN Mysql Statements RETURN expression; END41 hoặc Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;0. Điều này giống như chỉ định BEGIN Mysql Statements RETURN expression; END43 một cách rõ ràng. Trong phần thân của một thói quen được lưu trữ được xác định với đặc tính BEGIN Mysql Statements RETURN expression; END44, hàm BEGIN Mysql Statements RETURN expression; END37 trả về giá trị BEGIN Mysql Statements RETURN expression; END5 của thói quen. Để biết thông tin về kiểm toán người dùng trong các thói quen được lưu trữ, xem Phần & NBSP; 6.2.23, Kiểm toán hoạt động tài khoản dựa trên SQL SQL. Xem xét quy trình sau, hiển thị số lượng tài khoản MySQL được liệt kê trong bảng hệ thống BEGIN Mysql Statements RETURN expression; END47:
Quy trình được gán tài khoản BEGIN Mysql Statements RETURN expression; END5 của BEGIN Mysql Statements RETURN expression; END49 bất kể người dùng nào định nghĩa nó. Nó thực thi với các đặc quyền của tài khoản đó bất kể người dùng nào gọi nó (vì đặc tính bảo mật mặc định là BEGIN Mysql Statements RETURN expression; END5). Quy trình thành công hoặc thất bại tùy thuộc vào việc Invoker có đặc quyền DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;0 cho nó và BEGIN Mysql Statements RETURN expression; END49 có đặc quyền 9 cho bảng BEGIN Mysql Statements RETURN expression; END47. Bây giờ giả sử rằng quy trình được xác định với đặc tính BEGIN Mysql Statements RETURN expression; END55:
Quy trình vẫn có BEGIN Mysql Statements RETURN expression; END5 là BEGIN Mysql Statements RETURN expression; END49, nhưng trong trường hợp này, nó thực thi với các đặc quyền của người dùng gọi. Do đó, thủ tục thành công hoặc thất bại tùy thuộc vào việc Invoker có đặc quyền DELIMITER // CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC BEGIN DECLARE date2 DATE; Select current_date()into date2; RETURN year(date2)-year(date1); END // DELIMITER ;0 cho đặc quyền 9 cho bảng BEGIN Mysql Statements RETURN expression; END47. Theo mặc định, khi một thói quen có đặc tính BEGIN Mysql Statements RETURN expression; END32 được thực thi, máy chủ MySQL không đặt bất kỳ vai trò hoạt động nào cho tài khoản MySQL có tên trong mệnh đề BEGIN Mysql Statements RETURN expression; END5, chỉ có vai trò mặc định. Ngoại lệ là nếu biến hệ thống BEGIN Mysql Statements RETURN expression; END63 được bật, trong trường hợp đó, máy chủ MySQL đặt tất cả các vai trò được cấp cho người dùng BEGIN Mysql Statements RETURN expression; END5, bao gồm các vai trò bắt buộc. Do đó, bất kỳ đặc quyền nào được cấp thông qua các vai trò đều không được kiểm tra theo mặc định khi câu lệnh BEGIN Mysql Statements RETURN expression; END2 hoặc BEGIN Mysql Statements RETURN expression; END0 được ban hành. Đối với các chương trình được lưu trữ, nếu thực thi sẽ xảy ra với các vai trò khác với mặc định, cơ thể chương trình có thể thực thi BEGIN Mysql Statements RETURN expression; END67 để kích hoạt các vai trò cần thiết. Điều này phải được thực hiện một cách thận trọng vì các đặc quyền được gán cho vai trò có thể được thay đổi. Máy chủ xử lý kiểu dữ liệu của tham số thường quy, biến thường xuyên cục bộ được tạo bằng BEGIN Mysql Statements RETURN expression; END68 hoặc giá trị trả về chức năng như sau:
Làm thế nào bạn có thể tạo quy trình lưu trữ trong MySQL?Để tạo quy trình lưu trữ MySQL, hãy mở kết nối Workbench MySQL với cơ sở dữ liệu MySQL sao chép mã trong cửa sổ Trình soạn thảo truy vấn, nhấp vào thực thi.Bạn có thể xem thủ tục theo thủ tục được lưu trữ.open the MySQL workbench Connect to the MySQL Database copy-paste the code in the query editor window click on Execute. You can view the procedure under stored procedures.
Chúng ta có thể tạo chức năng trong MySQL không?Tuyên bố chức năng tạo cũng được sử dụng trong MySQL để hỗ trợ các chức năng có thể tải.Xem Phần 13.7.4.1, Tạo Tuyên bố chức năng tạo cho các chức năng có thể tải.Một hàm có thể tải có thể được coi là một hàm được lưu trữ bên ngoài.. See Section 13.7. 4.1, “CREATE FUNCTION Statement for Loadable Functions”. A loadable function can be regarded as an external stored function.
Tại sao bạn sẽ sử dụng chức năng được lưu trữ trong MySQL?Hàm lưu trữ MySQL về cơ bản là một loại chương trình được lưu trữ đặc biệt trả về một giá trị duy nhất.Chúng tôi có thể sử dụng các chức năng được lưu trữ trong MySQL để gói gọn các công thức đơn giản hoặc quy tắc kinh doanh có thể tái sử dụng giữa các câu lệnh SQL hoặc các chương trình được lưu trữ.to encapsulate mainly simple formulas or business rules that are reusable among SQL statements or stored programs.
Các chức năng MySQL được lưu trữ ở đâu?Các thủ tục lưu trữ được lưu trữ ở đâu?Các quy trình được lưu trữ được lưu trữ trong các bảng mysql.routines và mysql.parameter, là một phần của từ điển dữ liệu.mysql. routines and mysql. parameters tables, which are part of the data dictionary. |