Mysql cắt bớt khoảng trắng

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;

Nhóm phát triển của chúng tôi vừa ra mắt trang web langlearning. net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật,. miễn phí cho tất cả mọi người.
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ới

Facebook

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

  1. Create a function [Chức năng]
  2. Biên dịch chức năng này
  3. Run function

Nế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

________số 8

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 $$  
0

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 $$  
1

Hủ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 $$  
2

Cá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 $$  
3

Click 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 $$  
4

Sử 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 $$  
5

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 $$  
6

Else_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 $$  
7

Kế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 $$  
8

Trườ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 $$  
9

Trường hợp_Khi_Ví dụ2

SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
0

4. 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'
1

Trong 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'
2

Loop_Example2

SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
3

4. 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'
4

Trong 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'
5

4. 5- Vòng lặp WHILE. LÀM

cú pháp

SELECT id, get_designation1[`d_id`] as DESIGNATION, name FROM 'staff'
6

In 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'
7

5- Đ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'
8

Khi bạn thực thi thủ tục trên

  1. Các câu lệnh [1], [2], [3] sẽ chạy mà không có vấn đề gì
  2. 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
  3. 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'
9

Vui 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

  1. Các dòng lệnh [1],[2],[3] chạy mà không có vấn đề gì cả
  2. 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
  3. 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;  
0

Ví dụ 2

Xử lý_Exception_Example2

Drop function [ IF EXISTS ] function_name;  
1

5. 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;  
2

Có 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

  1. 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
  2. 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ớ
  3. 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

  1. 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
  2. Đố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

  1. 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
  2. SQLWARNING được viết tắt cho các lớp SQLSTATE có giá trị bắt đầu bởi '01'
  3. 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
  4. 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

  1. 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ệ]
  2. Đố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;  
3

Ví dụ với SQLException

Drop function [ IF EXISTS ] function_name;  
4

5. 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

Chủ Đề