IF ELSE trong thủ tục lưu sẵn MySQL

Hướng dẫn MySQL này giải thích cách sử dụng câu lệnh IF-THEN-ELSE trong MySQL với cú pháp và ví dụ

Sự miêu tả

Trong MySQL, câu lệnh IF-THEN-ELSE được sử dụng để thực thi mã khi điều kiện là TRUE hoặc thực thi mã khác nếu điều kiện ước tính là FALSE

cú pháp

Cú pháp của câu lệnh IF-THEN-ELSE trong MySQL là

IF condition1 THEN
   {...statements to execute when condition1 is TRUE...}

[ ELSEIF condition2 THEN
   {...statements to execute when condition1 is FALSE and condition2 is TRUE...} ]

[ ELSE
   {...statements to execute when both condition1 and condition2 are FALSE...} ]

END IF;
ELSEIFTùy chọn. Bạn sẽ sử dụng điều kiện ELSEIF khi bạn muốn thực hiện một tập hợp các câu lệnh khi điều kiện thứ hai [nghĩa là. điều kiện2] là ĐÚNG. KHÁCTùy chọn. Bạn sẽ sử dụng điều kiện ELSE khi bạn muốn thực thi một tập hợp các câu lệnh khi không có điều kiện IF hoặc ELSEIF nào được đánh giá là TRUE

Ghi chú

  • Khi một điều kiện được tìm thấy là TRUE, câu lệnh IF-THEN-ELSE sẽ thực thi mã tương ứng và không đánh giá các điều kiện nữa
  • Nếu không có điều kiện nào được đáp ứng, phần ELSE của câu lệnh IF-THEN-ELSE sẽ được thực thi
  • Điều quan trọng cần lưu ý là các phần ELSEIF và ELSE là tùy chọn

Ví dụ

Sau đây là ví dụ sử dụng câu lệnh IF-THEN-ELSE trong hàm MySQL

DELIMITER //

CREATE FUNCTION IncomeLevel [ monthly_value INT ]
RETURNS varchar[20]

BEGIN

   DECLARE income_level varchar[20];

   IF monthly_value  4000 AND monthly_value  200 THEN 

    CALL apply_free_shipping[sale_id];
END IF 
;
6 sẽ chỉ được thực thi nếu biểu thức được liên kết ước tính là TRUE. Các biểu thức như 1=1 hoặc 2>1 sẽ đánh giá là TRUE. Các biểu thức như 1>3 sẽ đánh giá là FALSE

Tuy nhiên, nếu bạn đang thực hiện một thao tác trên một hoặc nhiều biến và một trong các biến có giá trị NULL, thì kết quả của biểu thức có thể là NULL—không phải TRUE cũng không phải FALSE. Điều này có thể dẫn đến một số kết luận sai lầm nếu mã của bạn giả định rằng các biểu thức không TRUE nhất thiết phải là FALSE hoặc ngược lại. Vì vậy, ví dụ: trong , nếu chúng tôi không thể tìm thấy '_______15_______7' hoặc '

IF sale_value > 200 THEN 

    CALL apply_free_shipping[sale_id];
END IF 
;
8' trong chuỗi phiên bản, chúng tôi cho rằng bản phát hành đó đang được sản xuất. Tuy nhiên, nếu
IF sale_value > 200 THEN 

    CALL apply_free_shipping[sale_id];
END IF 
;
9 là NULL, thì điều kiện
IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
0 sẽ luôn kích hoạt, mặc dù chúng tôi thực sự không có cơ sở để đưa ra bất kỳ khẳng định nào như vậy

Ví dụ 4-5. Giả định sai rằng NOT TRUE = FALSE

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;

Mẹo

Đừng cho rằng kết quả của một biểu thức là TRUE hoặc FALSE. Nó cũng có thể đánh giá là NULL [UNKNOWN] nếu bất kỳ biến tham gia nào là NULL

Cũng lưu ý rằng bất kỳ biểu thức nào trả về giá trị số—hoặc chuỗi trông giống như số—có thể cho kết quả TRUE, FALSE hoặc NULL. các quy tắc là

  • Nếu giá trị tuyệt đối của một biểu thức số là 1 hoặc lớn hơn, thì nó sẽ được đánh giá là TRUE bởi câu lệnh

    IF expression THEN
        statements
    END IF;
    4 hoặc
    IF sale_value > 200 THEN 
    
        CALL apply_free_shipping[sale_id];
    END IF 
    ;
    6. Lưu ý rằng thuật ngữ “giá trị tuyệt đối” có nghĩa là cả 1 và -1 sẽ đánh giá là TRUE

  • Nếu giá trị của biểu thức số là 0, thì nó sẽ đánh giá là FALSE

Kết hợp NẾU-THEN đơn giản

Ở dạng đơn giản nhất,

IF expression THEN
    statements
END IF;
4 có thể được sử dụng để chỉ định một tập hợp các câu lệnh chỉ thực hiện nếu một điều kiện được đánh giá là TRUE. Cú pháp của loại câu lệnh
IF expression THEN
    statements
END IF;
4 này như sau

IF expression THEN
    statements
END IF;

hiển thị một câu lệnh

IF expression THEN
    statements
END IF;
4 đơn giản

Ví dụ 4-6. Ví dụ về câu lệnh IF đơn giản

IF sale_value > 200 THEN 

    CALL apply_free_shipping[sale_id];
END IF 
;

Chúng ta có thể bao gồm nhiều câu lệnh giữa các mệnh đề

IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
6 và
IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
7, như trong

Ví dụ 4-7. Câu lệnh IF nhiều câu lệnh

IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;

Như đã trình bày trong phần , chúng ta cũng có thể bao gồm bất kỳ câu lệnh thực thi nào khác bên trong câu lệnh

IF expression THEN
    statements
END IF;
4, chẳng hạn như các cấu trúc vòng lặp, câu lệnh
IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
9 và các câu lệnh
IF expression THEN
    statements
END IF;
4 khác [mặc dù, như chúng ta sẽ thấy sau này, tốt nhất là tránh lồng các câu lệnh
IF expression THEN
    statements
END IF;
4 theo cách này nếu

Ví dụ 4-8. Câu lệnh IF lồng nhau

IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    IF sale_value > 500 THEN
        CALL apply_discount[sale_id,20];
    END IF;
END IF;

Không cần thiết phải ngắt câu lệnh

IF expression THEN
    statements
END IF;
4 trên nhiều dòng;

Ví dụ 4-9. Định dạng thay thế cho câu lệnh IF

IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;


IF sale_value > 200
THEN
    CALL apply_free_shipping[sale_id];
END IF;


IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
END IF;

Có thể đặt một câu lệnh

IF expression THEN
    statements
END IF;
4 rất đơn giản trên một dòng, nhưng chắc chắn không phải là cách tốt để làm điều này đối với các cấu trúc
IF expression THEN
    statements
END IF;
4 phức tạp hoặc lồng nhau. Chẳng hạn, cái nào dễ đọc, dễ hiểu và dễ bảo trì hơn?

    IF sale_value > 200 THEN
        CALL apply_free_shipping[sale_id];
        IF sale_value > 500 THEN
            CALL apply_discount[sale_id,20];
        END IF;
    END IF;

Hoặc cái này

    IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value >
    500 THEN CALL apply_discount[sale_id,20];END IF;END IF;

Một số lập trình viên muốn đặt mệnh đề

IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
6 trên một dòng riêng, như sau

    IF sale_value > 200
    THEN
        CALL apply_free_shipping[sale_id];
    END IF;

Nhưng đây thực sự là vấn đề sở thích cá nhân và/hoặc tiêu chuẩn lập trình

Mẹo

Đối với bất kỳ câu lệnh

IF expression THEN
    statements
END IF;
4 không cần thiết nào, hãy sử dụng thụt lề và định dạng để đảm bảo rằng logic của câu lệnh
IF expression THEN
    statements
END IF;
4 của bạn dễ hiểu

Việc thêm điều kiện

IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
0 vào câu lệnh
IF expression THEN
    statements
END IF;
4 của bạn cho phép bạn chỉ định câu lệnh sẽ thực thi nếu điều kiện
IF expression THEN
    statements
END IF;
4 KHÔNG ĐÚNG. Chúng tôi sẽ nhấn mạnh một lần nữa—bởi vì nó quan trọng—rằng KHÔNG ĐÚNG không phải lúc nào cũng có nghĩa là SAI. Nếu điều kiện câu lệnh
IF expression THEN
    statements
END IF;
4 đánh giá là NULL, thì câu lệnh
IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
0 sẽ vẫn được thực thi;

Một khối

IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;


IF sale_value > 200
THEN
    CALL apply_free_shipping[sale_id];
END IF;


IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
END IF;
5 có cú pháp như sau

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
0

Vì vậy, trong , chúng tôi áp dụng phí vận chuyển cho đơn hàng nếu đơn hàng đó dưới $200;

Ví dụ 4-10. Ví dụ IF-THEN ELSE đơn giản

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
1

Câu lệnh IF-THEN-ELSEIF-ELSE

Cú pháp đầy đủ của câu lệnh

IF expression THEN
    statements
END IF;
4 cho phép xác định nhiều điều kiện. Điều kiện đầu tiên đánh giá là TRUE sẽ thực thi. Nếu không có câu nào đánh giá là TRUE, thì mệnh đề
IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
0 [nếu có] sẽ thực thi. Cú pháp của một câu lệnh
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;


IF sale_value > 200
THEN
    CALL apply_free_shipping[sale_id];
END IF;


IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
END IF;
8 trông như thế này

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
2

Bạn có thể có bao nhiêu điều kiện

IF sale_value > 200 THEN 

    CALL apply_free_shipping[sale_id];
END IF 
;
6 tùy thích

Các điều kiện không nhất thiết phải loại trừ lẫn nhau. Nghĩa là, nhiều điều kiện có thể đánh giá là TRUE. Điều kiện đầu tiên đánh giá TRUE là điều kiện thực thi. Tạo các điều kiện chồng chéo như thế này có thể hữu ích, nhưng bạn phải rất cẩn thận khi sắp xếp các điều kiện. Chẳng hạn, hãy xem xét câu lệnh

    IF sale_value > 200 THEN
        CALL apply_free_shipping[sale_id];
        IF sale_value > 500 THEN
            CALL apply_discount[sale_id,20];
        END IF;
    END IF;
0 được hiển thị trong

Ví dụ 4-11. Ví dụ về khối IF-ELSEIF với các điều kiện chồng chéo

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
3

Ý định của đoạn mã này là rõ ràng. áp dụng giao hàng miễn phí cho tất cả các đơn hàng trên 200 đô la và thêm chiết khấu 20% cho khách hàng ưu tiên. Tuy nhiên, vì điều kiện đầu tiên sẽ được đánh giá là ĐÚNG cho tất cả các đơn hàng trên 200 đô la, nên điều kiện

IF sale_value > 200 THEN 

    CALL apply_free_shipping[sale_id];
END IF 
;
6 sẽ không được đánh giá cho bất kỳ đơn hàng nào trên 200 đô la và những khách hàng ưu tiên của chúng tôi sẽ không được giảm giá. Không giảm giá cho khách hàng ưu tiên có nghĩa là không có tiền thưởng cuối năm cho lập trình viên thủ tục được lưu trữ của chúng tôi

Có một số cách tốt hơn để viết tuyên bố này. vì một điều, chúng ta có thể chuyển điều kiện

IF sale_value > 200 THEN 

    CALL apply_free_shipping[sale_id];
END IF 
;
6 vào mệnh đề
IF expression THEN
    statements
END IF;
4 để đảm bảo rằng nó được đánh giá trước;

Ví dụ 4-12. Hai cách sửa lỗi logic trong ví dụ trước

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
4

Cả hai lựa chọn thay thế được hiển thị trong đều hoàn toàn hợp lệ. Nói chung, chúng tôi muốn tránh các câu lệnh

IF expression THEN
    statements
END IF;
4 lồng nhau nếu có thể, nhưng nếu có nhiều đánh giá bổ sung mà chúng tôi cần tiến hành khi
    IF sale_value > 200 THEN
        CALL apply_free_shipping[sale_id];
        IF sale_value > 500 THEN
            CALL apply_discount[sale_id,20];
        END IF;
    END IF;
7 lớn hơn $200, thì có thể thực hiện kiểm tra
    IF sale_value > 200 THEN
        CALL apply_free_shipping[sale_id];
        IF sale_value > 500 THEN
            CALL apply_discount[sale_id,20];
        END IF;
    END IF;
7 một lần, sau đó kiểm tra riêng lẻ cho . Vì vậy, giả sử các quy tắc kinh doanh của chúng tôi quy định rằng đối với các đơn hàng trên 200 đô la, chúng tôi sẽ giao hàng miễn phí, cùng với chiết khấu thay đổi dựa trên trạng thái của khách hàng trong chương trình khách hàng thân thiết của chúng tôi. Logic trong một khối
    IF sale_value > 200 THEN
        CALL apply_free_shipping[sale_id];
        IF sale_value > 500 THEN
            CALL apply_discount[sale_id,20];
        END IF;
    END IF;
0 có thể trông giống như được hiển thị trong

Ví dụ 4-13. Khối IF với nhiều điều kiện dư thừa

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
5

Trong trường hợp này, sự lặp lại liên tục của điều kiện

    IF sale_value > 200 THEN
        CALL apply_free_shipping[sale_id];
        IF sale_value > 500 THEN
            CALL apply_discount[sale_id,20];
        END IF;
    END IF;
7 và lệnh gọi
    IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value >
    500 THEN CALL apply_discount[sale_id,20];END IF;END IF;
1 thực sự làm suy yếu khả năng đọc logic của chúng ta—cũng như áp đặt chi phí hoạt động [xem Chương 22]. Có thể tốt hơn nếu sử dụng cấu trúc
IF expression THEN
    statements
END IF;
4 lồng nhau để làm rõ rằng mọi người đều được giao hàng miễn phí cho các đơn hàng trên 200 đô la và sau đó chiết khấu chỉ được áp dụng dựa trên trạng thái khách hàng thân thiết. hiển thị triển khai
IF expression THEN
    statements
END IF;
4 lồng nhau

Ví dụ 4-14. Sử dụng IF lồng nhau để tránh đánh giá dư thừa

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
6

Câu lệnh

IF expression THEN
    statements
END IF;
5 là một câu lệnh điều khiển luồng hoặc thực thi có điều kiện thay thế. Bất cứ điều gì có thể được thực hiện với câu lệnh
IF expression THEN
    statements
END IF;
5 đều có thể được thực hiện với câu lệnh
IF expression THEN
    statements
END IF;
4 [và ngược lại], nhưng câu lệnh
IF expression THEN
    statements
END IF;
5 thường dễ đọc và hiệu quả hơn khi cần đánh giá nhiều điều kiện, đặc biệt là khi tất cả các điều kiện đều so sánh kết quả đầu ra từ một biểu thức duy nhất

IF expression THEN
    statements
END IF;
5 tuyên bố có thể có hai hình thức. Câu lệnh đầu tiên—đôi khi được gọi là câu lệnh
IF expression THEN
    statements
END IF;
5 đơn giản—so sánh đầu ra của một biểu thức có nhiều điều kiện

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
7

Cú pháp này hữu ích khi chúng ta đang kiểm tra đầu ra của một số biểu thức dựa trên một tập hợp các giá trị riêng biệt. Chẳng hạn, chúng ta có thể kiểm tra trạng thái trung thành của khách hàng từ ví dụ trước bằng cách sử dụng câu lệnh

IF expression THEN
    statements
END IF;
5 đơn giản được hiển thị trong

Ví dụ 4-15. Ví dụ về câu lệnh CASE đơn giản

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
8

Như với lệnh

IF expression THEN
    statements
END IF;
4, bạn có thể chỉ định nhiều câu lệnh
    IF sale_value > 200
    THEN
        CALL apply_free_shipping[sale_id];
    END IF;
2 và bạn có thể chỉ định mệnh đề
IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
0 sẽ thực thi nếu không có điều kiện nào khác áp dụng

Tuy nhiên, điều quan trọng là phải nhận ra rằng một tuyên bố

IF expression THEN
    statements
END IF;
5 sẽ đưa ra một ngoại lệ nếu không có điều kiện nào được áp dụng. Điều này có nghĩa là nếu
    IF sale_value > 200
    THEN
        CALL apply_free_shipping[sale_id];
    END IF;
5 không phải là một trong số '
    IF sale_value > 200
    THEN
        CALL apply_free_shipping[sale_id];
    END IF;
6', '
    IF sale_value > 200
    THEN
        CALL apply_free_shipping[sale_id];
    END IF;
7', '
    IF sale_value > 200
    THEN
        CALL apply_free_shipping[sale_id];
    END IF;
8' hoặc '
    IF sale_value > 200
    THEN
        CALL apply_free_shipping[sale_id];
    END IF;
9' thì ngoại lệ thời gian chạy sau đây sẽ xảy ra

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
9

Chúng ta có thể tạo một trình xử lý ngoại lệ để bỏ qua lỗi này [như được mô tả trong Chương 6], nhưng có lẽ cách tốt hơn là viết mã một mệnh đề

IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
0 để đảm bảo rằng tất cả các điều kiện có thể được xử lý. Vì vậy, có lẽ chúng ta nên điều chỉnh ví dụ trước để bao gồm một mệnh đề
IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
0 áp dụng chiết khấu bằng 0 cho khách hàng không đáp ứng các điều kiện trên

Mẹo

Nếu không có câu lệnh nào trong số

IF expression THEN
    statements
END IF;
5 phù hợp với điều kiện đầu vào, thì
IF expression THEN
    statements
END IF;
5 sẽ gây ra lỗi MySQL 1339. Bạn nên xây dựng một trình xử lý lỗi để bỏ qua lỗi này hoặc đảm bảo rằng ngoại lệ không bao giờ xảy ra bằng cách bao gồm mệnh đề
IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
0 trong câu lệnh
IF expression THEN
    statements
END IF;
5 của bạn

Câu lệnh

IF expression THEN
    statements
END IF;
5 đơn giản rất hữu ích khi so sánh giá trị của một biểu thức với một loạt các giá trị cụ thể. Tuy nhiên, câu lệnh
IF expression THEN
    statements
END IF;
5 đơn giản không thể khớp các phạm vi một cách dễ dàng hoặc tự nhiên hoặc xử lý các điều kiện phức tạp hơn liên quan đến nhiều biểu thức. Đối với những “trường hợp” phức tạp hơn này, chúng ta có thể sử dụng câu lệnh “đã tìm kiếm”
IF expression THEN
    statements
END IF;
5, được mô tả trong phần tiếp theo

Câu lệnh CASE “Đã tìm kiếm”

Câu lệnh

IF expression THEN
    statements
END IF;
5 được tìm kiếm có chức năng tương đương với một khối
   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
10. Câu lệnh
IF expression THEN
    statements
END IF;
5 được tìm kiếm có cú pháp như sau

IF expression THEN
    statements
END IF;
0

Sử dụng cấu trúc

IF expression THEN
    statements
END IF;
5 đã tìm kiếm, chúng tôi có thể triển khai logic giảm giá và miễn phí vận chuyển mà chúng tôi đã triển khai trước đó bằng cách sử dụng
IF expression THEN
    statements
END IF;
4. Bản dịch trực tiếp logic giảm giá bán hàng và giao hàng miễn phí của chúng tôi bằng cách sử dụng câu lệnh
IF expression THEN
    statements
END IF;
5 đã tìm kiếm được hiển thị trong

Ví dụ 4-16. Ví dụ về câu lệnh CASE đã tìm kiếm

IF expression THEN
    statements
END IF;
1

Tuy nhiên, hãy nhớ rằng nếu không có mệnh đề nào trong số các mệnh đề

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
15 khớp với nhau thì sẽ xảy ra lỗi 1339. Do đó, mã này sẽ gây ra lỗi nghiêm trọng nếu đơn đặt hàng dưới 200 đô la hoặc khách hàng không tham gia chương trình khách hàng thân thiết của chúng tôi—một kết quả không mấy vui vẻ. Vì vậy, chúng ta nên bảo vệ quy tắc của mình—và sự đảm bảo công việc của chúng ta—bằng cách bao gồm một điều khoản
IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
0 như trong

Ví dụ 4-17. Thêm mệnh đề ELSE giả vào ví dụ CASE đã tìm kiếm của chúng tôi

IF expression THEN
    statements
END IF;
2

Lưu ý rằng vì MySQL thiếu câu lệnh

   IF [INSTR[l_version_string,'alpha']>0] THEN
         SELECT 'Alpha release of MySQL';
    ELSEIF [INSTR[l_version_string,'beta']>0] THEN
         SELECT 'Beta release of MySQL';
    ELSE
         SELECT 'Production release of MySQL';
    END IF;
17 [không làm gì] trong ngôn ngữ chương trình được lưu trữ, nên chúng tôi phải thêm một câu lệnh giả—nhưng câu lệnh này có chi phí không đáng kể

Như với việc triển khai logic này của chúng tôi đối với

IF expression THEN
    statements
END IF;
4, chúng tôi cũng có thể sử dụng các câu lệnh
IF expression THEN
    statements
END IF;
5 lồng nhau để thực hiện cùng một logic với sự rõ ràng hơn nhiều. Trong chúng tôi kết hợp các câu lệnh
IF expression THEN
    statements
END IF;
5 đơn giản và được tìm kiếm, đồng thời bao gồm một trình xử lý “không tìm thấy” để tránh phải bao gồm các câu lệnh
IF sale_value > 200 THEN
    CALL apply_free_shipping[sale_id];
    CALL apply_discount[sale_id,10];
END IF;
0. Chúng tôi đặt toàn bộ nội dung trong một khối để trình xử lý của chúng tôi không vô tình ảnh hưởng đến các câu lệnh khác trong chương trình được lưu trữ

Ví dụ 4-18. Sử dụng các câu lệnh CASE lồng nhau và trình xử lý “không tìm thấy” trong phạm vi khối

IF expression THEN
    statements
END IF;
3

Chúng ta đã thấy rằng cả hai câu lệnh

IF expression THEN
    statements
END IF;
4 và
IF expression THEN
    statements
END IF;
5 đều có thể triển khai cùng một chức năng kiểm soát luồng. Vậy cái nào là tốt nhất? . Tuy nhiên, khi quyết định giữa
IF expression THEN
    statements
END IF;
5 và
IF expression THEN
    statements
END IF;
4, hãy cân nhắc những điều sau

  • Tính nhất quán trong phong cách có lẽ quan trọng hơn bất kỳ lợi thế nhỏ nào mà một trong hai cách tiếp cận có thể có trong một hoàn cảnh cụ thể. Do đó, chúng tôi khuyên bạn nên chọn giữa

    IF expression THEN
        statements
    END IF;
    5 và
    IF expression THEN
        statements
    END IF;
    4 một cách nhất quán và không chuyển đổi ngẫu nhiên giữa hai tùy thuộc vào tâm trạng, thời tiết hoặc tử vi của bạn

  • IF expression THEN
        statements
    END IF;
    5 dễ đọc hơn một chút khi bạn đang so sánh một biểu thức đơn lẻ với một loạt các giá trị riêng biệt [sử dụng câu lệnh
    IF expression THEN
        statements
    END IF;
    5 “đơn giản”]

  • IF expression THEN
        statements
    END IF;
    4 có lẽ là một cấu trúc quen thuộc và dễ hiểu hơn khi bạn đánh giá các phạm vi hoặc biểu thức phức tạp dựa trên nhiều biến

  • Nếu bạn chọn

    IF expression THEN
        statements
    END IF;
    5, bạn cần đảm bảo rằng ít nhất một trong các điều kiện của
    IF expression THEN
        statements
    END IF;
    5 được khớp hoặc xác định một trình xử lý lỗi để bắt lỗi sẽ xảy ra nếu không có điều kiện nào của
    IF expression THEN
        statements
    END IF;
    5 được thỏa mãn.
    IF expression THEN
        statements
    END IF;
    4 không có hạn chế như vậy

Hãy nhớ—dù bạn sử dụng cấu trúc nào—thì

  • Khi bất kỳ điều kiện nào trong cấu trúc

    IF expression THEN
        statements
    END IF;
    5 hoặc
    IF expression THEN
        statements
    END IF;
    4 được thỏa mãn, sẽ không có điều kiện nào nữa được đánh giá. Điều này có nghĩa là nếu các điều kiện của bạn trùng lặp theo bất kỳ cách nào, thì thứ tự đánh giá là rất quan trọng

  • Ngôn ngữ chương trình được lưu trữ trong MySQL sử dụng logic ba giá trị;

  • Bạn nên suy nghĩ cẩn thận về mức độ dễ đọc của các câu lệnh của mình—đôi khi một tập hợp các câu lệnh

    IF expression THEN
        statements
    END IF;
    4 hoặc
    IF expression THEN
        statements
    END IF;
    5 lồng vào nhau sẽ dễ đọc hơn và có thể hiệu quả hơn. Tuy nhiên, tốt hơn hết là tránh lồng vào nhau, đặc biệt nếu các câu lệnh trở nên lồng vào nhau sâu [chẳng hạn ba cấp trở lên]

    Làm thế nào để sử dụng nếu khác trong truy vấn MySQL?

    Câu lệnh IF-THEN-ELSE của MySQL . Câu điều kiện IF THEN; . true – câu lệnh giữa IF-THEN và ELSE sẽ được thực thi. If a specified condition is: true – statements between IF-THEN and ELSE will be executed.

    Làm cách nào để sử dụng điều kiện if other trong thủ tục được lưu trữ trong SQL Server 2008?

    Câu lệnh IF ELSE kiểm soát luồng thực thi trong SQL Server. Nó có thể được sử dụng trong thủ tục lưu trữ, hàm, trình kích hoạt, v.v. để thực thi các câu lệnh SQL dựa trên các điều kiện đã chỉ định . Biểu thức Boolean. Một biểu thức boolean trả về TRUE hoặc FALSE.

    Làm cách nào để trả về một giá trị từ một thủ tục được lưu trữ trong MySQL?

    Để trả về một giá trị từ thủ tục được lưu trữ, bạn cần phải sử dụng biến phiên cụ thể do người dùng xác định. Thêm biểu tượng @ trước tên biến .

    Làm cách nào để sử dụng if other trong SQL Server?

    Câu lệnh Transact-SQL theo sau từ khóa IF và điều kiện của nó được thực thi nếu điều kiện được thỏa mãn. biểu thức Boolean trả về TRUE. Từ khóa ELSE tùy chọn giới thiệu một câu lệnh Transact-SQL khác được thực thi khi điều kiện IF không được thỏa mãn. biểu thức Boolean trả về FALSE

Chủ Đề