Mysql chứa chức năng

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
67

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
68

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
69

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
70

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
71

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
72

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
73

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
74

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
75

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
70

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
71

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
72

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
682

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
683

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
684

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
685

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
686

Create a function

Trong MySQL, Hàm cũng có thể được tạo. Một hàm luôn trả về một giá trị bằng cách sử dụng câu lệnh return. Hàm này có thể được sử dụng trong truy vấn SQL

Nội dung chính Hiển thị

  • Create a function
  • Ví dụ 1
  • Clear hàm
  • Ví dụ 1
  • 13. 1. 17 TẠO THỦ TỤC và TẠO CHỨC NĂNG Câu lệnh

cú pháp

CREATE FUNCTION function_name [ (parameter datatype [, parameter datatype]) ]   
RETURNS return_datatype  
BEGIN  
Declaration_section  
Executable_section  
END;  

Tham số

Tên chức năng. tên chức năng

Tham số. tham số number. Có thể là một tham số hoặc nhiều hơn

return_datatype. Kiểu dữ liệu giá trị được trả về,

phần khai báo. Các biến được khai báo

phần thực thi. Mã hàm được viết tại đây

Ví dụ 1

Bước  1. Create  CSDL and bảng

CSDL. Nhân viên

Mysql chứa chức năng

Bảng 1. chỉ định

Bảng 2. Nhân Viên

Bước 2. Create a function

Câu truy vấn trong hàm

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  

Bước 3. Thi hàm

Câu hỏi

SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'

Clear hàm

In MySQL function can also be delete, Hàm can could be delete from from

cú pháp

Drop function [ IF EXISTS ] function_name;  

Tham số

Tên chức năng. Tên hàm sẽ bị xóa

Ví dụ 1

Xóa hàm tên là get_designation_name;

13. 1. 17 TẠO THỦ TỤC và TẠO CHỨC NĂNG Câu lệnh

CREATE
    [DEFINER = user]
    PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = user]
    FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement

Các câu lệnh này được sử dụng để tạo một thói quen được lưu trữ (một thủ tục hoặc chức năng được lưu trữ). Nghĩa là, quy trình được chỉ định sẽ được máy chủ biết đến. 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 quy trình một cách rõ ràng với một cơ sở dữ liệu nhất định, hãy chỉ định tên là

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
84 khi bạn tạo nó

Câu lệnh

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
0 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, “CREATE FUNCTION Statement for Loadable Functions”. Một chức năng có thể tải có thể được coi là một chức năng đượ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 chúng với các chức năng có thể tải. Xem Phần 9. 2. 5, “Phân tích và phân giải tên hàm”, dành 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 hàm khác nhau

Để gọi một thủ tục được lưu trữ, hãy sử dụng câu lệnh

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
1 (xem Phần 13. 2. 1, “Tuyên bố GỌI”). Để 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

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
2 và
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
0 yêu cầu đặc quyền
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
4. Nếu có mệnh đề
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5, thì các đặc quyền cần có sẽ phụ thuộc vào giá trị
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
6, như đã thảo luận trong Phần 25. 6, “Kiểm soát truy cập đối tượng được lưu trữ”. Nếu tính năng ghi nhật ký nhị phân được bật, thì
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
0 có thể yêu cầu đặc quyền của
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
8, như đã thảo luận trong Phần 25. 7, “Ghi nhật ký nhị phân chương trình được lưu trữ”

Theo mặc định, MySQL tự động cấp các đặc quyền

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
9 và
SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
0 cho trình tạo thường trình. Hành vi này có thể được thay đổi bằng cách vô hiệu hóa biến hệ thống
SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
1. Xem Phần 25. 2. 2, “Các quy trình được lưu trữ và các đặc quyền của MySQL”

Các mệnh đề

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5 và
SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
3 chỉ định ngữ 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 điểm thực hiện thông thường, như được mô tả sau trong phần này

Nếu tên thường trình giống với tên của một hàm SQL tích hợp, lỗi cú pháp sẽ 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ường trình hoặc gọi nó sau này. 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ường trình được lưu trữ của riêng bạn

Chế độ SQL

SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
4 áp dụng cho các chức năng tích hợp sẵn, không áp dụng cho các quy trình được lưu trữ. Luôn cho phép có khoảng trắng sau tên quy trình được lưu trữ, bất kể có bật
SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
4 hay không

SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
6 ngăn lỗi xảy ra nếu đã tồn tại một quy trình có cùng tên. Tùy chọn này được hỗ trợ với cả
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
0 và
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
2 bắt đầu với MySQL 8. 0. 29

Nếu một hàm tích hợp có cùng tên đã tồn tại, việc cố gắng tạo một hàm được lưu trữ với

SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
9 sẽ thành công với một cảnh báo cho biết rằng nó có cùng tên với một hàm gốc;

Nếu một chức năng có thể tải được có cùng tên đã tồn tại, việc cố gắng tạo một chức năng được lưu trữ bằng cách sử dụng

SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
6 sẽ thành công với một cảnh báo. Điều này giống như không chỉ định
SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
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 có mặt. Nếu không có tham số, nên sử dụng danh sách tham số trống của

Drop function [ IF EXISTS ] function_name;  
4. Tên tham số không phân biệt chữ hoa chữ thường

Mỗi tham số là một tham số

Drop function [ IF EXISTS ] function_name;  
5 theo mặc định. Để chỉ định khác cho một tham số, hãy sử dụng từ khóa
Drop function [ IF EXISTS ] function_name;  
6 hoặc
Drop function [ IF EXISTS ] function_name;  
7 trước tên tham số

Ghi chú

Việc chỉ định một tham số là

Drop function [ IF EXISTS ] function_name;  
5,
Drop function [ IF EXISTS ] function_name;  
6 hoặc
Drop function [ IF EXISTS ] function_name;  
7 chỉ có hiệu lực đối với một
CREATE
    [DEFINER = user]
    PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = user]
    FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement
1. Đối với
CREATE
    [DEFINER = user]
    PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = user]
    FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement
2, tham số luôn được coi là tham số
Drop function [ IF EXISTS ] function_name;  
5

Một tham số

Drop function [ IF EXISTS ] function_name;  
5 chuyển một giá trị vào một thủ tục. Thủ tục có thể sửa đổi giá trị, nhưng sửa đổi không hiển thị cho người gọi khi thủ tục trả về. Tham số
Drop function [ IF EXISTS ] function_name;  
6 chuyển một giá trị từ thủ tục trở lại trình gọi. Giá trị ban đầu của nó là
CREATE
    [DEFINER = user]
    PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = user]
    FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement
6 trong thủ tục và giá trị của nó hiển thị cho người gọi khi thủ tục trả về. Tham số
Drop function [ IF EXISTS ] function_name;  
7 được khởi tạo bởi người gọi, có thể được sửa đổi bởi thủ tục và bất kỳ thay đổi nào được thực hiện bởi thủ tục đều hiển thị cho người gọi khi thủ tục trả về

Đối với mỗi tham số

Drop function [ IF EXISTS ] function_name;  
6 hoặc
Drop function [ IF EXISTS ] function_name;  
7, hãy chuyển một biến do người dùng xác định trong câu lệnh
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
1 để gọi thủ tục để bạn có thể lấy giá trị của nó khi thủ tục trả về. Nếu bạn đang gọi thủ tục từ bên trong một thủ tục hoặc hàm được lưu trữ khác, bạn cũng có thể truyền tham số thường trình hoặc biến thường trình cục bộ dưới dạng tham số
Drop function [ IF EXISTS ] function_name;  
6 hoặc
Drop function [ IF EXISTS ] function_name;  
7. Nếu bạn đang gọi thủ tục từ bên trong trình kích hoạt, bạn cũng có thể chuyển
CREATE
    [DEFINER = user]
    PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = user]
    FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement
83 dưới dạng tham số
Drop function [ IF EXISTS ] function_name;  
6 hoặc
Drop function [ IF EXISTS ] function_name;  
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ố quy trình, hãy xem Phần 13. 6. 7. 8, “Xử lý điều kiện và Thông số OUT hoặc INOUT”

Các tham số thường trình không thể được tham chiếu trong các câu lệnh được chuẩn bị trong thường trình; . 8, “Hạn chế đối với các chương trình được lưu trữ”

Ví dụ sau đây cho thấy một thủ tục được lưu trữ đơn giản, được cung cấp mã quốc gia, đếm số lượng thành phố của quốc gia đó xuất hiện trong bảng

CREATE
    [DEFINER = user]
    PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = user]
    FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement
86 của cơ sở dữ liệu
CREATE
    [DEFINER = user]
    PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = user]
    FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement
87. Mã quốc gia được chuyển bằng tham số
Drop function [ IF EXISTS ] function_name;  
5 và số lượng thành phố được trả về bằng tham số
Drop function [ IF EXISTS ] function_name;  
6

CREATE
    [DEFINER = user]
    PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = user]
    FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement
8

Ví dụ sử dụng lệnh mysql client

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
60 để thay đổi dấu phân cách câu lệnh từ
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
61 thành
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
62 trong khi quy trình đang được xác định. Điều này cho phép dấu phân cách
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
61 được sử dụng trong phần thân thủ tục được chuyển qua máy chủ thay vì được giải thích bởi chính mysql . Xem Phần 25. 1, “Định nghĩa các chương trình được lưu trữ”.

Điều khoản

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
64 chỉ có thể được chỉ định cho một
CREATE
    [DEFINER = user]
    PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = user]
    FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

routine_body:
    Valid SQL routine statement
2, điều này là bắt buộc. Nó cho biết kiểu trả về của hàm và thân hàm phải chứa câu lệnh
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
66. Nếu câu lệnh
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
67 trả về một giá trị thuộc loại khác, thì giá trị đó sẽ được chuyển sang loại phù hợp. Ví dụ: nếu một hàm chỉ định giá trị
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
68 hoặc
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
69 trong mệnh đề
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
64, nhưng câu lệnh
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
67 trả về một số nguyên, thì giá trị được trả về từ hàm là chuỗi cho phần tử
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
68 tương ứng của tập hợp gồm các phần tử
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
69

Hàm ví dụ sau nhận một tham số, thực hiện một thao tác bằng hàm SQL và trả về kết quả. Trong trường hợp này, không cần thiết phải sử dụng

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
60 vì định nghĩa hàm không chứa dấu phân cách câu lệnh
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
61 bên trong

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
6

Các kiểu tham số và kiểu trả về của hàm có thể được khai báo để sử dụng bất kỳ kiểu dữ liệu hợp lệ nào. Thuộc tính

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
36 có thể được sử dụng nếu trước thông số kỹ thuật của
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
37

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
38 bao gồm một câu lệnh SQL hợp lệ. Đây có thể là một câu lệnh đơn giản như
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
39 hoặc
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
70 hoặc một câu lệnh ghép được viết bằng cách sử dụng
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
71 và
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
72. Các câu lệnh ghép có thể chứa các khai báo, vòng lặp và các câu lệnh cấu trúc điều khiển khác. Cú pháp của những câu lệnh này được mô tả trong Phần 13. 6, “Cú pháp câu lệnh ghép”. Trong thực tế, các hàm được lưu trữ có xu hướng sử dụng các câu lệnh ghép, trừ khi phần thân bao gồm một câu lệnh
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
67

MySQL cho phép các thói quen chứa các câu lệnh DDL, chẳng hạn như

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
74 và
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
75. MySQL cũng cho phép các thủ tục được lưu trữ (nhưng không phải các chức năng được lưu trữ) chứa các câu lệnh giao dịch SQL, chẳng hạn như
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
76. 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 khôi phục rõ ràng hoặc ẩn. Tiêu chuẩn SQL không yêu cầu hỗ trợ cho các câu lệnh này, trong đó nêu rõ rằng mỗi nhà cung cấp DBMS có thể quyết định có 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 thủ tục được lưu trữ chứ không phải trong một hàm được lưu trữ. Lệnh cấm này bao gồm các câu lệnh

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
39 không có mệnh đề
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
78 và các câu lệnh khác như
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
79,
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
840 và
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
841. Đối với các câu lệnh có thể được xác định tại thời điểm định nghĩa hàm để trả về một tập kết quả, sẽ xảy ra lỗi
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
842 (
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
843). Đố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ả, sẽ xảy ra lỗi
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
844 (
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
845)

Các câu lệnh

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
846 trong các thói quen được lưu trữ không được phép. Khi một thói quen được gọi, một
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
847 ngầm được thực hiện (và hoàn tác khi thói quen kết thúc). Nguyên nhân khiến thủ tục có cơ sở dữ liệu mặc định nhất định trong khi nó thực thi. Tham chiếu đến các đối tượng trong cơ sở dữ liệu khác với cơ sở dữ liệu mặc định thông thường phải đủ điều kiện với tên cơ sở dữ liệu thích hợp

Để biết thêm thông tin về các câu lệnh không được phép trong các quy trình được lưu trữ, hãy xem Phần 25. 8, “Hạn chế đối với các chương trình được lưu trữ”

Để biết thông tin về cách gọi các thủ tục đượ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, hãy xem Phần 13. 2. 1, “Tuyên bố GỌI”

MySQL lưu cài đặt biến hệ thống

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
848 có hiệu lực khi một quy trình được tạo hoặc thay đổi và luôn thực thi quy trình với cài đặt này có hiệu lực, bất kể chế độ SQL của máy chủ hiện tại khi . .

Việc chuyển từ chế độ SQL của trình gọi sang chế độ của thủ tục 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ủ tục. Nếu bạn xác định một thủ tục trong chế độ nghiêm ngặt SQL nhưng gọi nó trong chế độ không nghiêm ngặt, việc gán đối số cho các tham số thường trình không diễn ra trong 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 quy trình được chỉ định ở chế độ SQL nghiêm ngặt, thì bạn nên gọi quy trình có chế độ nghiêm ngặt đang có hiệu lực

Đặc tính

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
849 là một phần mở rộng của MySQL và có thể được sử dụng để mô tả quy trình được lưu trữ. Thông tin này được hiển thị bởi các câu lệnh
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
00 và
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
01

Đặc tính

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
02 cho biết ngôn ngữ mà quy trình được viết. Máy chủ bỏ qua đặc điểm này;

Một quy trình được coi là có tính quyết định nếu nó . Nếu cả

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
03 và
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
04 đều không được đưa ra trong định nghĩa thông thường, giá trị mặc định là
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
04. Để tuyên bố rằng một chức năng là xác định, bạn phải chỉ định rõ ràng
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
03. not deterministic otherwise. If neither
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
03 nor
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
04 is given in the routine definition, the default is
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
04. To declare that a function is deterministic, you must specify
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
03 explicitly.

Việc đánh giá bản chất của một thói quen dựa trên sự trung thực of the creator: MySQL does not check that a routine declared

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
03 is free of statements that produce nondeterministic results. However, misdeclaring a routine might affect results or affect performance. Declaring a nondeterministic routine as
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
03 might lead to unexpected results by causing the optimizer to make incorrect execution plan choices. Declaring a deterministic routine as
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
09 might diminish performance by causing available optimizations not to be used.

Nếu tính năng ghi nhật ký nhị phân được bật, đặc tính

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
03 sẽ ảnh hưởng đến các định nghĩa thường trình mà MySQL chấp nhận. Xem Phần 25. 7, “Ghi nhật ký nhị phân chương trình được lưu trữ”

Một thói quen chứa hàm

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
11 (hoặc các từ đồng nghĩa của nó) hoặc
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
12 là không xác định, nhưng nó vẫn có thể sao chép an toàn. Đối với
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
11, nhật ký nhị phân bao gồm dấu thời gian và sao chép chính xác.
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
12 cũng sao chép chính xác miễn là nó chỉ được gọi một lần duy nhất trong quá trình thực hiện quy trình. (Bạn có thể coi dấu thời gian thực hiện quy trình và hạt giống số ngẫu nhiên là các đầu vào ẩn giống hệt nhau trên nguồn và bản sao. )

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 quy trình. Trong MySQL, những đặc điểm này chỉ mang tính chất tư vấn. Máy chủ không sử dụng chúng để hạn chế loại câu lệnh nào mà một thường trình được phép thực thi

  • DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    15 chỉ ra rằng thủ tục không chứa các câu lệnh đọc hoặc ghi dữ liệu. Đây là mặc định nếu không có đặc điểm nào trong số này được đưa ra một cách rõ ràng. Ví dụ về các câu lệnh như vậy là
    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    16 hoặc
    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    17, thực thi nhưng không đọc hoặc ghi dữ liệu

  • DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    18 chỉ ra rằng thủ tục không chứa câu lệnh SQL nào

  • DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    19 chỉ ra rằng thủ tục chứa các câu lệnh đọc dữ liệu (ví dụ:
    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    39), nhưng không chứa các câu lệnh ghi dữ liệu

  • DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    21 chỉ ra rằng thủ tục chứa các câu lệnh có thể ghi dữ liệu (ví dụ:
    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    70 hoặc
    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    23)

Đặc tính

SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
3 có thể là
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5 hoặc
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
26 để chỉ định bối cảnh bảo mật; . Tài khoản này phải có quyền truy cập cơ sở dữ liệu có liên quan đến quy trình. Giá trị mặc định là
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5. Người dùng gọi thủ tục phải có đặc quyền
SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
0 cho nó, cũng như tài khoản
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5 nếu thủ tục thực thi trong ngữ cảnh bảo mật của bộ định nghĩa

Mệnh đề

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5 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 điểm thực hiện thường trình cho các thường trình có đặc tính
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
32

Nếu có mệnh đề

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5, thì giá trị
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
6 phải là tài khoản MySQL được chỉ định là
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
35'@'
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
36',
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
37 hoặc
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
38. Các giá trị
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
6 được phép tùy thuộc vào các đặc quyền mà bạn nắm giữ, như đã thảo luận trong Phần 25. 6, “Kiểm soát truy cập đối tượng được lưu trữ”. Đồng thời xem phần đó để biết thêm thông tin về bảo mật thường trình được lưu trữ

Nếu mệnh đề

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5 bị bỏ qua, định nghĩa mặc định là người dùng thực thi câu lệnh
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
2 hoặc
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
0. Điều này giống như chỉ định rõ ràng
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
43

Trong phần thân của quy trình được lưu trữ được xác định bằng đặc tính

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
32, hàm
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
37 trả về giá trị
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5 của quy trình. Để biết thông tin về kiểm tra người dùng trong các quy trình được lưu trữ, hãy xem Phần 6. 2. 23, “Kiểm tra hoạt động tài khoản dựa trên SQL”

Xem xét quy trình sau đây, quy trình này hiển thị số lượng tài khoản MySQL được liệt kê trong bảng hệ thống

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
47

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
3

Quy trình được chỉ định một tài khoản

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5 của
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
49 bất kể người dùng nào xác định 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 điểm bảo mật mặc định là
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5). Thủ tục thành công hay thất bại tùy thuộc vào việc người gọi có đặc quyền
SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
0 cho nó và
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
49 có đặc quyền
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
39 cho bảng
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
47

Bây giờ, giả sử rằng thủ tục được xác định với đặc tính

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
55

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
7

Thủ tục vẫn có một

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5 của
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
49, 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 đang gọi. Do đó, thủ tục thành công hay thất bại tùy thuộc vào việc người gọi có đặc quyền
SELECT id, get_designation1(`d_id`) as DESIGNATION, name FROM 'staff'
0 cho nó và đặc quyền
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
39 cho bảng
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
47 hay không

Theo mặc định, khi một quy trình có đặc tính

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
32 được thực thi, Máy chủ MySQL không đặt bất kỳ vai trò tích cực nào cho tài khoản MySQL có tên trong mệnh đề
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5, chỉ đặt các vai trò mặc định. Ngoại lệ là nếu biến hệ thống
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
63 đượ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
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
5, 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 phát hành câu lệnh
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
2 hoặc
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
0. Đối với các chương trình được lưu trữ, nếu việc thực thi xảy ra với các vai trò khác với vai trò mặc định, phần thân chương trình có thể thực thi
DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
67 để kích hoạt các vai trò được yêu cầu. Đ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 các vai trò có thể bị thay đổi

Máy chủ xử lý kiểu dữ liệu của tham số thường trình, biến thường trình cục bộ được tạo bằng

DELIMITER $$   
CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
BEGIN   
DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
SELECT name INTO de_name FROM designation WHERE id = d_id;  
RETURN de_name;  
END $$  
68 hoặc giá trị trả về của hàm như sau

  • Các bài tập được kiểm tra để loại dữ liệu không khớp và tràn. Sự cố chuyển đổi và tràn dẫn đến cảnh báo hoặc lỗi trong chế độ SQL nghiêm ngặt

  • Chỉ có thể gán giá trị vô hướng. Ví dụ: một câu lệnh chẳng hạn như

    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    69 không hợp lệ

  • Đối với các kiểu dữ liệu ký tự, nếu khai báo có chứa

    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    37 thì bộ ký tự đã chỉ định và đối chiếu mặc định của nó sẽ được sử dụng. Nếu thuộc tính
    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    36 cũng có mặt, thì đối chiếu đó được sử dụng thay vì đối chiếu mặc định

    Nếu không có

    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    37 và
    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    36, bộ ký tự và đối chiếu cơ sở dữ liệu có hiệu lực tại thời điểm tạo quy trình sẽ được sử dụng. Để tránh việc máy chủ sử dụng bộ ký tự và đối chiếu cơ sở dữ liệu, hãy cung cấp thuộc tính
    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    37 và
    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    36 rõ ràng cho các tham số dữ liệu ký tự

    Nếu bạn thay đổi bộ ký tự hoặc đối chiếu mặc định của cơ sở dữ liệu, thì các quy trình được lưu trữ để sử dụng các giá trị mặc định của cơ sở dữ liệu mới phải được loại bỏ và tạo lại

    Bộ ký tự cơ sở dữ liệu và đối chiếu được đưa ra bởi giá trị của các biến hệ thống

    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    76 và
    DELIMITER $$   
    CREATE FUNCTION get_designation_name(d_id INT) RETURNS VARCHAR( 20 )   
    BEGIN   
    DECLARE de_name VARCHAR( 20 ) DEFAULT "";  
    SELECT name INTO de_name FROM designation WHERE id = d_id;  
    RETURN de_name;  
    END $$  
    77. Để biết thêm thông tin, hãy xem Phần 10. 3. 3, “Bộ ký tự cơ sở dữ liệu và đối chiếu”