Câu lệnh Oracle PL / SQL IF THEN ELSE: ELSIF, NESTED-IF

Mục lục:

Anonim

Tuyên bố ra quyết định là gì?

Các câu lệnh ra quyết định là những người sẽ quyết định việc kiểm soát luồng của các câu lệnh SQL dựa trên các điều kiện. Nó cho phép lập trình viên kiểm soát tốt hơn việc ngăn chặn một mã cụ thể thực thi (sơ đồ 1) hoặc chọn một mã mong muốn dựa trên điều kiện (sơ đồ 2). Dưới đây là hình ảnh đại diện của "Tuyên bố ra quyết định".

Sơ đồ tuyên bố ra quyết định

Các loại tuyên bố ra quyết định:

Oracle cung cấp các loại câu lệnh ra quyết định sau.

  • NẾU-THEN
  • IF-THEN-ELSE
  • IF-THEN-ELSIF
  • NESTED-NẾU
  • TRƯỜNG HỢP
  • TRƯỜNG HỢP ĐÃ TÌM KIẾM

Trong hướng dẫn này, bạn sẽ học-

  • Giới thiệu về Tuyên bố ra Quyết định
  • Câu lệnh IF-THEN
  • Câu lệnh IF-THEN-ELSE
  • Câu lệnh IF-THEN-ELSIF
  • Tuyên bố NESTED-IF

Câu lệnh IF-THEN

Câu lệnh IF-THEN chủ yếu được sử dụng để thực thi một phần mã cụ thể chỉ khi điều kiện được thỏa mãn.

Điều kiện sẽ mang lại Boolean (Đúng / Sai). Đây là một câu lệnh điều kiện cơ bản sẽ cho phép ORACLE thực thi / bỏ qua một đoạn mã cụ thể dựa trên các điều kiện được xác định trước.

Cú pháp cho các câu lệnh IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • Trong cú pháp trên, từ khóa 'IF' sẽ được theo sau bởi một điều kiện được đánh giá là 'TRUE' / 'FALSE'.
  • Điều khiển sẽ thực hiện chỉ khi điều kiện trả về .
  • Trong trường hợp điều kiện được đánh giá là thì SQL sẽ bỏ qua và nó sẽ bắt đầu thực thi mã bên cạnh khối 'END IF'.

Lưu ý: Bất cứ khi nào điều kiện được đánh giá là 'NULL', thì SQL sẽ coi 'NULL' là 'FALSE'.

Ví dụ 1 : Trong ví dụ này, chúng ta sẽ in một tin nhắn khi số lớn hơn 100. Vì vậy, chúng ta sẽ thực thi đoạn mã sau

Để in tin nhắn khi một số có giá trị lớn hơn 100, chúng tôi thực hiện đoạn mã sau.

DECLAREa NUMBER :=10;BEGINdbms_output.put_line(‘Program started.' );IF( a> 100 ) THENdbms_output.put_line('a is greater than 100');END IF;dbms_output.put_line(‘Program completed.');END;/

Giải thích mã:

  • Dòng mã 2: Khai báo biến 'a' là kiểu dữ liệu 'NUMBER' và khởi tạo với giá trị '10'.
  • Dòng mã 4: In thông báo "Chương trình đã bắt đầu".
  • Dòng mã 5: Kiểm tra điều kiện, liệu biến 'a' có lớn hơn '100' hay không.
  • Dòng mã 6: Nếu 'a' lớn hơn '100', thì "a lớn hơn 100" sẽ được in. Nếu 'a' nhỏ hơn hoặc bằng 100, thì điều kiện không thành công, vì vậy lệnh in ở trên bị bỏ qua.
  • Dòng mã 8: In câu lệnh "Đã hoàn thành chương trình".

Đầu ra mã:

Program started.Program completed. 

Ví dụ 2: Trong ví dụ này, chúng ta sẽ in một tin nhắn nếu một bảng chữ cái nhất định có các nguyên âm tiếng Anh (A, E, I, O, U).

Để in một tin nhắn khi ký tự đã cho là Nguyên âm, chúng tôi thực thi đoạn mã sau.

DECLAREa CHAR(1) :=’u’;BEGINIF UPPER(a) in ('A’,'E','I','0','U' ) THENdbms_output.put_line(‘The character is in English Vowels');END IF;END;/

Giải thích mã:

  • Dòng mã 2: Khai báo biến 'a' là 'CHAR' có kiểu dữ liệu size '1' và khởi tạo với giá trị 'u'.
  • Dòng mã 4: Kiểm tra điều kiện, xem biến 'a' có trong danh sách hay không ('A', 'E', 'I', 'O', 'U').
  • Giá trị của 'a' đã được chuyển đổi thành chữ hoa trước khi so sánh để so sánh không phân biệt chữ hoa chữ thường.
  • Dòng mã 5: Nếu 'a' có trong danh sách, thì câu lệnh "Ký tự là nguyên âm tiếng Anh" sẽ được in. Nếu điều kiện không thành công, thì chương trình này sẽ không đưa ra bất kỳ đầu ra nào, vì bên ngoài khối IF-THEN, chúng tôi không đưa ra bất kỳ câu lệnh in nào.

Đầu ra mã:

The character is in English Vowels

Câu lệnh IF-THEN-ELSE

  • Câu lệnh IF-THEN-ELSE chủ yếu được sử dụng để chọn giữa hai lựa chọn thay thế dựa trên điều kiện.
  • Dưới đây là biểu diễn cú pháp của câu lệnh IF-THEN-ELSE.

Cú pháp cho các câu lệnh IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • Trong cú pháp trên, từ khóa 'IF' sẽ được theo sau bởi một điều kiện được đánh giá là 'TRUE' / 'FALSE'.
  • Điều khiển sẽ thực hiện chỉ khi điều kiện trả về .
  • Trong trường hợp điều kiện được đánh giá là thì SQL sẽ thực thi .
  • Trong mọi trường hợp, một trong hai khối hành động sẽ được thực thi.

Lưu ý: Bất cứ khi nào điều kiện đánh giá là 'NULL', thì SQL sẽ coi 'NULL' là 'FALSE'.

Ví dụ 1 : Trong ví dụ này, chúng ta sẽ in ra thông báo cho dù số đã cho là số lẻ hay số chẵn.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_output.put_line('a is odd number1);END IF;dbms_output.put_line (‘Program completed.’);END;/

Giải thích mã:

  • Dòng mã 2: Khai báo biến 'a' là kiểu dữ liệu 'NUMBER' và khởi tạo với giá trị '11'.
  • Dòng mã 4: In thông báo "Chương trình đã bắt đầu".
  • Dòng mã 5: Kiểm tra điều kiện, xem môđun của biến 'a' theo '2' có bằng 0 hay không.
  • Dòng mã 6: Nếu '0', thì "a là số chẵn" sẽ được in.
  • Dòng mã 7: Nếu giá trị môđun không bằng '0', thì điều kiện trả về , do đó thông báo "a là số lẻ" sẽ được in ra.
  • Dòng mã 10: In thông báo "Chương trình đã hoàn thành"

Đầu ra mã:

Program started.a is odd numberProgram completed. 

Câu lệnh IF-THEN-ELSIF

  • Câu lệnh IF-THEN-ELSIF chủ yếu được sử dụng khi một phương án nên được chọn từ một tập hợp các phương án thay thế, trong đó mỗi phương án có các điều kiện riêng phải được thỏa mãn.
  • Các điều kiện đầu tiên trả về sẽ được thực thi và các điều kiện còn lại sẽ bị bỏ qua.
  • Câu lệnh IF-THEN-ELSIF có thể chứa khối 'ELSE' trong đó. Khối 'ELSE' này sẽ được thực thi nếu không có điều kiện nào được thỏa mãn.

Lưu ý : Khối ELSE là tùy chọn trong câu lệnh điều kiện này. Nếu không có khối ELSE và không có điều kiện nào được thỏa mãn, thì bộ điều khiển sẽ bỏ qua tất cả khối hành động và bắt đầu thực hiện phần còn lại của mã.

Cú pháp cho các câu lệnh IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • Trong cú pháp trên, điều khiển sẽ thực thi chỉ khi điều kiện1 trả về .
  • Nếu điều kiện 1 không được thỏa mãn, thì bộ điều khiển sẽ kiểm tra điều kiện 2.
  • Bộ điều khiển sẽ thoát khỏi câu lệnh IF trong hai trường hợp sau.
    • Khi bộ điều khiển tìm thấy bất kỳ điều kiện nào trả về . Trong trường hợp này, action_block tương ứng sẽ được thực thi và bộ điều khiển sẽ thoát khỏi khối lệnh IF này và sẽ bắt đầu thực thi đoạn mã còn lại.
    • Khi không có điều kiện nào được thỏa mãn, bộ điều khiển then sẽ thực hiện khối ELSE nếu có, sau đó sẽ thoát khỏi câu lệnh IF.

Lưu ý: Bất cứ khi nào điều kiện đánh giá là 'NULL', thì SQL sẽ coi 'NULL' là 'FALSE'.

Ví dụ 1: Không có khối ELSE

Trong ví dụ này, chúng tôi sẽ in điểm dựa trên các điểm đã cho mà không có điều kiện khác (đánh dấu> = 70 Điểm A, đánh dấu> = 40 và đánh dấu <70 Điểm B, đánh dấu> = 35 và đánh dấu <40 Điểm C).

DECLAREmark NUMBER :=55;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C’);END IF;dbms_output.put_line(‘Program completed.’);END;/

Giải thích mã:

  • Dòng mã 2: Khai báo biến 'mark' là kiểu dữ liệu 'NUMBER' và khởi tạo với giá trị '55'.
  • Dòng mã 4: In thông báo "Chương trình đã bắt đầu".
  • Dòng mã 5: Kiểm tra điều kiện 1, xem 'dấu' lớn hơn hay bằng 70.
  • Dòng mã 7: Vì điều kiện1 không thành công nên điều kiện2 '70> đánh dấu> = 40 'được chọn.
  • Dòng mã 8: condtition2 trả về , do đó thông báo 'Grade B' sẽ được in.
  • Dòng mã12: In thông báo "Chương trình đã hoàn thành".
  • Trong trường hợp này, điều kiện 3 'mark <35' sẽ bị bỏ qua, vì bộ điều khiển tìm thấy một điều kiện trả về trước điều kiện3.

Đầu ra mã:

Program started.Grade BProgram completed.

Ví dụ 2 : Với khối ELSE

Trong ví dụ này, chúng tôi sẽ in điểm dựa trên các điểm đã cho với điều kiện khác (đánh dấu> = 70 Điểm A, đánh dấu> = 40 và đánh dấu <70 Điểm B, đánh dấu> = 35 và đánh dấu <40 Điểm C, khác 'Không có hạng').

DECLAREmark NUMBER :=25;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C);ELSEdbms_output.put_line(‘No Grade’);END IF;dbms_output.put_line(‘Program completed.' );END;/

Giải thích mã:

  • Dòng mã 2: Khai báo biến 'mark' là kiểu dữ liệu 'NUMBER' và khởi tạo với giá trị '25'.
  • Dòng mã 4: In thông báo "Chương trình đã bắt đầu".
  • Dòng mã 5: Kiểm tra điều kiện 1, xem 'dấu' lớn hơn hay bằng 70.
  • Dòng mã 7: Vì điều kiện1 không thành công nên điều kiện2 '70> đánh dấu> = 40 'được chọn.
  • Dòng mã 8: Vì điều kiện 2 không thành công nên điều kiện 3 '40> đánh dấu> = 35' được chọn.
  • Dòng mã 11: Vì tất cả các điều kiện không thành công, điều khiển bây giờ sẽ kiểm tra sự hiện diện của khối ELSE và nó sẽ in thông báo 'Không có Điểm' từ khối ELSE.
  • Dòng mã14: In thông báo "Chương trình đã hoàn thành".

Đầu ra mã:

Program started.No GradeProgram completed.

Tuyên bố NESTED-IF

  • Câu lệnh NESTED-IF về cơ bản cho phép các lập trình viên đặt một hoặc nhiều điều kiện 'IF' bên trong của điều kiện 'IF' khác với các câu lệnh bình thường.
  • Mỗi điều kiện 'IF' phải có một câu lệnh 'END IF' riêng biệt đánh dấu phần cuối của phạm vi cụ thể đó.
  • Câu lệnh 'IF' sẽ coi câu lệnh 'END IF' gần nhất làm điểm cuối cho điều kiện cụ thể đó.
  • Biểu diễn bằng hình ảnh cho NESTED-IF được hiển thị bên dưới sơ đồ.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Giải thích cú pháp:
  • Trong cú pháp trên, IF bên ngoài chứa thêm một câu lệnh IF trong khối hành động của nó.
  • Điều kiện1 trả về , sau đó điều khiển sẽ thực thi và kiểm tra điều kiện2.
  • Nếu condition2 cũng trả về , thì cũng sẽ được thực thi.
  • Trong trường hợp condition2 đánh giá là thì SQL sẽ bỏ qua .

Ở đây, chúng ta sẽ xem một ví dụ về Nếu lồng nhau -

Ví dụ về câu lệnh lồng nhau- If: Lớn nhất trong ba số

Trong ví dụ này, chúng ta sẽ in ra số lớn nhất trong ba số bằng cách sử dụng câu lệnh lồng nhau-If. Các số sẽ được gán trong phần khai báo, như bạn có thể thấy trong đoạn mã bên dưới, tức là Số = 10,15 và 20 và số tối đa sẽ được tìm nạp bằng các câu lệnh if lồng nhau.

DECLAREa NUMBER :=10;b NUMBER :=15;c NUMBER :=20;BEGINdbms_output.put_line(‘Program started.' );IF( a> b)THEN/*Nested-if l */dbms_output.put_line(’Checking Nested-IF 1');IF( a> c ) THENdbms_output.put_line(‘A is greatest’);ELSEdbms_output.put_line(‘C is greatest’);END IF;ELSE/*Nested-if2 */dbms_output.put_line('Checking Nested-IF 2' );IF( b> c ) THENdbms_output.put_line(’B is greatest' );ELSEdbms_output.put_line(’C is greatest' );END IF;END IF;dbms_output.put_line(‘Program completed.’ );END;/

Giải thích mã:

  • Dòng mã 2: Khai báo biến 'a' là kiểu dữ liệu 'NUMBER' và khởi tạo với giá trị '10'.
  • Dòng mã 3: Khai báo biến 'b' là kiểu dữ liệu 'NUMBER' và khởi tạo với giá trị '15'.
  • Dòng mã 4: Khai báo biến 'c' là kiểu dữ liệu 'NUMBER' và khởi tạo với giá trị '20'.
  • Dòng mã 6: In câu lệnh "Chương trình đã bắt đầu" (dòng 6).
  • Dòng mã 7: Kiểm tra điều kiện 1, xem 'a' có lớn hơn 'b' hay không (dòng 7).
  • Dòng mã 10: Nếu 'a' lớn hơn 'b, thì điều kiện trong' lồng nhau-nếu 1 'sẽ kiểm tra xem' a 'có lớn hơn' c 'hay không (dòng 10).
  • Dòng mã 13: Nếu vẫn còn 'a' lớn hơn, thì thông báo 'A là lớn nhất' sẽ được in (dòng 11). Ngược lại, nếu điều kiện 2 không thành công, thì 'C lớn nhất' sẽ được in (dòng 13).
  • Dòng mã 18: Trong trường hợp condition1 trả về false, thì điều kiện trong 'lồng nhau-nếu 2' sẽ kiểm tra xem 'b' có lớn hơn 'c' hay không (dòng 18).
  • Dòng mã 21: Nếu 'b' lớn hơn 'c' thì thông báo 'B lớn nhất' sẽ được in (dòng 19), ngược lại nếu điều kiện 2 không thành công thì thông báo 'C lớn nhất' sẽ được in (dòng 21).
  • Dòng mã 24: In thông báo "Chương trình đã hoàn thành" (dòng 24).

Đầu ra của mã:

Program started.Checking Nested-IF 2C is greatestProgram completed.

Tóm lược

Trong chương này, chúng ta đã học các câu lệnh ra quyết định khác nhau, cú pháp và ví dụ của chúng. Bảng dưới đây cung cấp tóm tắt các câu lệnh điều kiện khác nhau mà chúng ta đã thảo luận.

KIỂU

SỰ MIÊU TẢ

SỬ DỤNG

NẾU-THEN

Kiểm tra điều kiện Boolean, nếu mã TRUE trong khối 'THEN' sẽ được thực thi.

Để bỏ qua, / thực thi một mã cụ thể dựa trên điều kiện.

IF-THEN-ELSE

Kiểm tra điều kiện Boolean, nếu mã TRUE trong khối 'THEN' sẽ được thực thi, nếu mã sai trong khối 'ELSE' được thực thi.

Thích hợp nhất trong điều kiện 'NÀY-HOẶC-ĐÓ'.

IF-THEN-ELSIF

Kiểm tra điều kiện Boolean theo thứ tự tuần tự. Khối đầu tiên trong chuỗi trả về điều kiện TRUE sẽ được thực hiện. Nếu không có điều kiện nào trong chuỗi là ĐÚNG, thì mã trong khối 'ELSE' sẽ được thực thi.

Được sử dụng để chọn từ nhiều hơn hai lựa chọn thay thế chủ yếu.

NESTED-NẾU

Cho phép một hoặc nhiều câu lệnh IF-THEN hoặc IF-THEN-ELSIF bên trong (các) câu lệnh IF-THEN hoặc IF-THEN-ELSIF khác.

Chủ yếu được sử dụng trong tình huống điều kiện lồng nhau.