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
- 1- Bắt đầu với MySQL Workbench
- 2- Hàm [Chức năng]
- 3- Thủ tục [Procedure]
- 4- Các lệnh cơ bản
- 4. 1- Câu Lệnh phụ nhánh If-elsif-else
- 4. 2- CASE câu lệnh rẽ nhánh
- 4. 3- Vòng lặp không định trước [LOOP]
- 4. 4- Vòng lặp REPEAT. CHO ĐẾN KHI
- 4. 5- Vòng lặp WHILE. LÀM
- 5- Điều khiển ngoại lệ
- 5. 1- Ví dụ bắt đầu với ngoại lệ
- 5. 2- Định nghĩa điều khiển ngoại lệ
- 5. 3- Chuẩn đoán lỗi [Get DIAGNOSTICS]
- 6- Con trỏ [Con trỏ]
- 6. 1- Con trỏ là gì?
- 6. 2- Ví dụ với Con trỏ
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
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;
Là một trang web được viết trên web công nghệ Flutter vì hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại trang web đang tiếp tục được cập nhật nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi. Hãy theo dõi chúng tôi trên Fanpage để nhận thông báo mỗi khi có bài viết mớiFacebook
TÀI KHOẢN ĐANG ĐƯỢC CẬP NHẬP 70%
1- Bắt đầu với MySQL Workbench
Trong tài liệu này, tôi sẽ hướng dẫn bạn thiết lập chương trình MySQL trên công cụ trực tiếp MySQL Workbench. Nếu bạn sử dụng một công cụ trực quan khác để viết mã thì cũng không có nhiều khác biệt gì cả
This is the image MySQL Workbench during you new open it. Bấm vào vùng khoanh đỏ để chọn SCHEMA bạn muốn làm việc
Có một số ví dụ SCHEMA có sẵn khi bạn cài đặt đầy đủ phiên bản Cộng đồng MySQL
Hoặc bạn có thể tạo SCHEMA learningsql, một ví dụ SCHEMA, được sử dụng trong một vài tài liệu hướng dẫn MySQL trên o7planning. tổ chức.
Click chuột phải vào một SCHEMA, select "Set as Default Schema" để làm việc với lược đồ này
Nhấn vào biểu tượng tạo mới một cửa sổ SQL để viết mã [1]. Click vào khoanh tròn khoanh vùng [2] để ẩn một số cửa sổ không cần thiết
2- Hàm [Chức năng]
Giống như thủ tục, hàm [hàm] là nhóm lệnh PL/SQL thực hiện chức năng nào đó. Khác với thủ tục, các chức năng sẽ trả về một giá trị ngay tại lời gọi của nó.
Hàm cũng có thể được lưu giữ ngay trên cơ sở dữ liệu dưới dạng Thủ tục lưu trữ.
Cú pháp tạo Hàm
-- function_name: Tên hàm
-- argument: Tên tham số
-- mode: IN hoặc không cần viết.
-- datatype: Kiểu dữ liệu của tham số
CREATE FUNCTION
[
[
[mode1] argument1 datatype1,
[mode2] argument2 datatype2,
...
]
]
RETURNS datatype
BEGIN
-- Khai báo biến sử dụng
-- Code nội dung của hàm
-- Trả về giá trị của hàm.
END;
Ví dụ
-- Một hàm có tham số:
CREATE FUNCTION Sum_Ab[a Integer, b Integer]
RETURNS Integer
Begin
return a + b;
End;
-- Một hàm không tham số:
CREATE FUNCTION Get_Current_Datetime[]
RETURNS Date
Begin
return current_date[];
End;
Hủy Chức năng [Chức năng thả]
-- Hủy Function
DROP FUNCTION ;
-- Ví dụ:
DROP FUNCTION My_Function;
-- Ví dụ:
DROP FUNCTION IF EXISTS `My_Function`;
call a function
-- Khi gọi hàm phải khai báo một biến trả về
-- Khai báo một biến c.
Declare c Integer;
....
-- Gọi hàm.
Set c = Sum_Ab[10, 100];
Ví dụ như tạo một chức năng
Đây là một ví dụ về việc tạo một hàm đầu tiên của bạn với MySQL
- Create a function [Chức năng]
- Biên dịch chức năng này
- Run function
________số 8Nếu bạn mới bắt đầu với hàm và tiếp tục MySQL, hãy xem chi tiết mục này, nó sẽ giúp bạn dễ dàng hiểu các vấn đề tiếp theo được cập nhật trong tài liệu
Click biểu tượng để biên dịch hàm
Các hàm có thể tham gia trong câu lệnh SELECT
SELECT
acc.account_id,
acc.cust_id,
acc.avail_balance,
acc.pending_balance,
MY_SUM[acc.avail_balance, acc.pending_balance] balance
FROM
account acc;
Kết quả chạy câu lệnh SQL trên
3- Thủ tục [Procedure]
Một nhóm các lệnh thực hiện chức năng nào có thể được gom lại trong một thủ tục [thủ tục] Nhằm tăng khả năng xử lý, khả năng xử lý chung, tăng tính bảo mật và an toàn dữ liệu .
Thủ tục có thể được lưu giữ ngay trong cơ sở dữ liệu như một đối tượng của cơ sở dữ liệu, sẵn sàng cho việc tái sử dụng. Thủ tục này được gọi là Thủ tục lưu trữ. Với các thủ tục được lưu trữ, ngay khi lưu trữ thủ tục được lưu trữ, chúng đã được biên dịch thành mã định dạng p vì thế có thể nâng cao khả năng thực hiện.
Tiếp tục không trả về giá trị trực tiếp như chức năng. Nhưng nó có thể không có hoặc nhiều tham số đầu ra
Cú pháp tạo một thủ tụ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 $$
0Ví 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 $$
1Hủy bỏ thủ tụ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 $$
2Các bước thực hiện một thủ tục
Ví dụ như tạo một thủ tục
Ở đây tôi tạo một thủ tục đơn giản, với tham số truyền vào là p_Emp_ID và có 3 tham số đầu ra, v_First_Name, v_Last_Name, v_Dep_ID
Get_Employee_Infos
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 $$
3Click vào biểu tượng để biên dịch thủ tục
Kiểm tra liên tục
Trong quá trình thiết lập công việc kiểm tra một thủ tục và phát hiện lỗi là một vấn đề rất quan trọng. Mở một cửa sổ mới và thực thi đoạn lệnh gọi thủ tụ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 $$
4Sử dụng @variable_name để lưu trữ các tham số đầu ra
4- Các lệnh cơ bản
Ở đây tôi giới thiệu tổng quan về các lệnh cơ bản của PL/SQL. Bạn sẽ hiểu rõ hơn về nó thông qua các ví dụ ở các phần tiếp theo
4. 1- Câu Lệnh phụ nhánh If-elsif-else
cú pháp
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 $$
5Ví 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 $$
6Else_If_Example
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 $$
7Kết quả kiểm tra thủ tục
4. 2- CASE câu lệnh rẽ nhánh
cú pháp
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 $$
8Trường hợp_Khi_Ví dụ1
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 $$
9Trường hợp_Khi_Ví dụ2
SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
04. 3- Vòng lặp không định trước [LOOP]
cú pháp
SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
1Trong vòng lặp LOOP, bạn có thể sử dụng LEAVE để thoát khỏi vòng lặp, RETURN cũng có thể được sử dụng, nhưng đó là lệnh thoát khỏi thủ tục.
Sử dụng lệnh ITERATE để bỏ qua các dòng lệnh trong khối LOOP và ở bên dưới nó, để tiếp tục một vòng lặp mới.
LEAVE giống với BREAK, và ITERATE giống với CONTINUE trong ngôn ngữ lập trình khác như Java, C/C++, C#
Loop_Example1
SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
2Loop_Example2
SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
34. 4- Vòng lặp REPEAT. CHO ĐẾN KHI
REPEAT loop. UNTIL có nghĩa là lặp lại. for to when theđiều kiện không còn đúng nữa. It same as loop do. trong khi ngôn ngữ Java, C/C++, C#
cú pháp
SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
4Trong vòng lặp REPEAT. UNTIL bạn cũng có thể sử dụng lệnh LEAVE, ITERATE và ý nghĩa là không có gì thay đổi [Xem thêm trong LOOP]
Repeat_Until_Example
SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
54. 5- Vòng lặp WHILE. LÀM
cú pháp
SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
6In the loop WHILE. Bạn cũng có thể sử dụng lệnh LEAVE, ITERATE và ý nghĩa là không có gì thay đổi [Xem thêm trong LOOP]
While_Do_Ví dụ
SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
75- Điều khiển ngoại lệ
Trong khi thiết lập chương trình MySQL, có thể một lỗi có thể phát sinh, giả sử giới hạn trèn vào một bản ghi trùng lặp từ khóa chính, MySQL sẽ ném ra một ngoại lệ có mã số tương ứng với nguyên nhân gây ra lỗi.
Trong MySQL để xử lý một sự cố ngoại lệ, bạn xác định nghĩa của một biến và bảo đảm rằng MySQL sẽ gán một giá trị bất kỳ cho biến này khi có một ngoại lệ phát sinh. Bạn có thể kiểm tra giá trị của biến để biết lỗi vừa vặn ra và cách sử dụng nó
5. 1- Ví dụ bắt đầu với ngoại lệ
Vui lòng xem một thủ tục dữ liệu trong bảng Bộ phận
Xử lý_Exception_Example1
SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
8Khi bạn thực thi thủ tục trên
- Các câu lệnh [1], [2], [3] sẽ chạy mà không có vấn đề gì
- Câu lệnh [4] sẽ gây ra lỗi do bạn trèn một bản ghi vào bảng Bộ sao chép từ khóa chính đã có sẵn trong DB, nó thoát ra khỏi thủ tục
- Câu lệnh [5] sẽ không được thực thi
Chúng ta sửa lại mã của thủ tục trên, thêm vào các đoạn mã sử dụng ngoại lệ
Xử lý_Exception_Example1 [2]
SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
9Vui lòng xem hình minh họa khi bạn gọi thủ tục ở trên
You was Khai báo bộ điều khiển lỗi 1062, là loại TIẾP TỤC có nghĩa là sau khi bắt gặp lỗi 1062, chương trình vẫn tiếp tục chạy các dòng mã bên dưới
Khi bạn gọi thủ tục
- Các dòng lệnh [1],[2],[3] chạy mà không có vấn đề gì cả
- Câu lệnh [4] ném ra lỗi 1062 do tồn tại trong bộ phận ghi bản có DEPT_ID = 1. Lỗi chương trình sử dụng cách ghi ra một dòng thông báo
- Dòng code [5] is continue being running
Trong trường hợp bạn muốn chương trình thoát khỏi khối lệnh khi gặp lỗi, bạn có thể khai báo lỗi bộ điều khiển theo kiểu EXIT
Drop function [ IF EXISTS ] function_name;
0Ví dụ 2
Xử lý_Exception_Example2
Drop function [ IF EXISTS ] function_name;
15. 2- Định nghĩa điều khiển ngoại lệ
Các ví dụ trên đã minh họa cách thức điều khiển ngoại lệ trong MySQL. Và giờ bạn có thể xem quy tắc tổng
cú pháp
Drop function [ IF EXISTS ] function_name;
2Có thể nhận hai giá trị TIẾP TỤC hoặc THOÁT
- CONTINUE: Nói với chương trình rằng khi lỗi xẩy ra hãy thực thi và tiếp tục.
- EXIT: Nói với chương trình rằng khi lỗi xẩy ra hãy thực thi và thoát khỏi khối lệnh cha.
Mô tả các đặc điểm của lỗi mà khi phát sinh lỗi, bộ điều khiển này sẽ hoạt động. It could be
- Một công cụ mã lỗi có thể [là một con số], ví dụ
- 1062 là lỗi khi chèn thêm một bản ghi mà ID của nó đã tồn tại
- Một chuỗi chuỗi có 5 ký tự [Mã SQLSTATE chuẩn], ví dụ
- HY000 là mã lỗi nói rằng ổ đĩa bị đầy
- HY001 là lỗi tràn bộ nhớ
- Một lớp thông báo lỗi đã được MySQL đặt tên hoặc có thể do người dùng đặt tên, chẳng hạn
- SQLCẢNH BÁO. is the warning which has standard code started by '01'
- KHÔNG TÌM THẤY. is layer of the error has standard code [SQLSTATE] started by '02'. Thường liên quan tới sử lý con trỏ
- SQLEXCEPTION. Là các lớp lỗi mà có mã chuẩn không bắt đầu bởi '00', '01', '02'. Chú ý rằng mã bắt đầu bởi '00' là thông báo thành công
Chú thích. Nếu một điều kiện phát sinh, mà bạn không khai báo một bộ điều khiển [xử lý] nào, thì chương trình sẽ sử lý theo mặc định, tùy thuộc vào lớp điều kiện
- Với điều kiện SQLEXCEPTION, chương trình thủ tục sẽ tiếp tục tại vị trí lỗi
- Đối với các điều kiện SQLWARNING hoặc NOTFOUND, chương trình vẫn tiếp tục thực thi, giống như có bộ điều khiển CONTINUE [trình xử lý TIẾP TỤC]
Tools
- Lỗi mã của MySQL là một số, hoặc giá trị SQLSTATE là một chuỗi 5 ký tự. Bạn không nên sử dụng mã lỗi 0 hoặc SQLSTATE mà giá trị bắt đầu bởi '00', bởi vì nó thông báo sự thành công chứ không phải lỗi
- SQLWARNING được viết tắt cho các lớp SQLSTATE có giá trị bắt đầu bởi '01'
- NOT FOUND được viết tắt cho các lớp SQLSTATE có giá trị bắt đầu bởi '02'. Cái này phù hợp trong bối cảnh sử dụng con trỏ [Cursor] và được sử dụng để kiểm tra những gì sẽ xảy ra khi con trỏ tiến về phía cuối của một tập hợp dữ liệu. Khi không còn một bản ghi nào, Điều kiện khi không có dữ liệu sẽ phát sinh, với SQLSTATE có giá trị là '02000'. Để phát điều kiện này, bạn có thể khai báo bộ điều khiển [Handler] cho nó [KHÔNG TÌM THẤY]. Bạn có thể xem ví dụ ở phần nói về con trỏ [Cursor]. Điều kiện này cũng phát sinh cho câu lệnh CHỌN. INTO var_list Statements when it does not have any data line
- SQLEXCEPTION được viết tắt cho các lớp SQLSTATE mà giá trị không bắt đầu bởi '00', '01' hoặc '02'
Nếu một điều kiện phát sinh mà không có bộ điều khiển nào khai báo, thì hành động sử lý tùy thuộc vào lớp điều kiện
- Với điều kiện SQLEXCEPTION, chương trình thủ tục sẽ không bị gián đoạn tại vị trí lệnh phát điều kiện [ngoại lệ]
- Đối với các điều kiện SQLWARNING hoặc NOT FOUND, chương trình vẫn tiếp tục thực thi, giống như có bộ điều khiển CONTINUE [trình xử lý TIẾP TỤC]
Bạn có thể tra cứu mã lỗi và thông báo lỗi tại
Ví dụ với error code
Drop function [ IF EXISTS ] function_name;
3Ví dụ với SQLException
Drop function [ IF EXISTS ] function_name;
45. 3- Chuẩn đoán lỗi [Get DIAGNOSTICS]
Một khi ngoại lệ ra, bạn muốn lấy thông tin về lỗi, giả định mã lỗi, SQLSTATE và thông báo lỗi, các thông tin khác
- LÀM
6- Con trỏ [Con trỏ]
6. 1- Con trỏ là gì?
Con trỏ là kiểu biến có cấu trúc, cho phép bạn xử lý dữ liệu bao gồm nhiều dòng. Số dòng phụ thuộc vào câu lệnh truy vấn dữ liệu sau nó. Trong quá trình xử lý, bạn có thể thao tác với con trỏ thông qua từng dòng dữ liệu. Dòng dữ liệu này được định vị bởi một con trỏ. Với công việc chuyển con trỏ, bạn có thể lấy toàn bộ dữ liệu của một dòng hiện tại