Thứ Tư, 26 tháng 10, 2022

PL/SQL - Điều kiện

Trong chương này, chúng ta sẽ thảo luận về các điều kiện trong PL / SQL. Cấu trúc ra quyết định yêu cầu người lập trình chỉ định một hoặc nhiều điều kiện để được đánh giá hoặc kiểm tra bởi chương trình, cùng với một câu lệnh hoặc các câu lệnh sẽ được thực thi nếu điều kiện được xác định là đúng, và tùy chọn, các câu lệnh khác sẽ được thực thi nếu điều kiện được xác định là sai.

Sau đây là dạng chung của cấu trúc có điều kiện (tức là ra quyết định) điển hình được tìm thấy trong hầu hết các ngôn ngữ lập trình:

Các câu lệnh ra quyết định trong PL / SQL

Ngôn ngữ lập trình PL / SQL cung cấp các loại câu lệnh ra quyết định sau. Nhấp vào các liên kết sau để kiểm tra chi tiết của chúng.

STTTuyên bố & Mô tả
1Câu lệnh IF - THEN

Câu lệnh IF liên kết một điều kiện với một chuỗi câu lệnh được bao bởi các từ khóa THEN và END IF . Nếu điều kiện là đúng, các câu lệnh sẽ được thực thi và nếu điều kiện là sai hoặc NULL thì câu lệnh IF không làm gì cả.

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

Câu lệnh IF thêm từ khóa ELSE theo sau bởi một chuỗi câu lệnh thay thế. Nếu điều kiện là false hoặc NULL, thì chỉ chuỗi câu lệnh thay thế được thực thi. Nó đảm bảo rằng một trong hai chuỗi câu lệnh được thực thi.

3Câu lệnh IF-THEN-ELSIF

Nó cho phép bạn chọn giữa một số lựa chọn thay thế.

4Tuyên bố tình huống

Giống như câu lệnh IF, câu lệnh CASE chọn một chuỗi các câu lệnh để thực thi.

Tuy nhiên, để chọn chuỗi, câu lệnh CASE sử dụng một bộ chọn thay vì nhiều biểu thức Boolean. Bộ chọn là một biểu thức có giá trị được sử dụng để chọn một trong một số lựa chọn thay thế.

5Câu lệnh CASE đã tìm kiếm

Câu lệnh CASE được tìm kiếm không có bộ chọn và đó là mệnh đề WHEN chứa các điều kiện tìm kiếm mang lại giá trị Boolean.

6IF-THEN-ELSE lồng nhau

Bạn có thể sử dụng một 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 .

PL / SQL - Câu lệnh IF-THEN

Đây là dạng đơn giản nhất của câu lệnh điều khiển IF , thường được sử dụng trong việc ra quyết định và thay đổi luồng điều khiển của việc thực hiện chương trình.

Câu lệnh IF liên kết một điều kiện với một chuỗi câu lệnh được bao bởi các từ khóa THEN và END IF . Nếu điều kiện là TRUE , các câu lệnh sẽ được thực thi, và nếu điều kiện là FALSE hoặc NULL , thì câu lệnh IF không có tác dụng gì.

Cú pháp

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

IF condition THEN  
   S; 
END IF; 

Trong đó điều kiện là một Boolean hoặc điều kiện quan hệ và S là một câu lệnh đơn giản hoặc phức hợp. Sau đây là một ví dụ về câu lệnh IF-THEN:

IF (a <= 20) THEN
   c:= c+1;
END IF;

Nếu điều kiện biểu thức Boolean đánh giá là true, thì khối mã bên trong câu lệnh if sẽ được thực thi. Nếu biểu thức Boolean đánh giá là false, thì bộ mã đầu tiên sau khi kết thúc câu lệnh if (sau khi kết thúc đóng if) sẽ được thực thi.

Sơ đồ khối

Câu lệnh if-then PL / SQL

ví dụ 1

Hãy để chúng tôi thử một ví dụ sẽ giúp bạn hiểu khái niệm -

DECLARE 
   a number(2) := 10; 
BEGIN 
   a:= 10; 
  -- check the boolean condition using if statement  
   IF( a < 20 ) THEN 
      -- if condition is true then print the following   
      dbms_output.put_line('a is less than 20 ' ); 
   END IF; 
   dbms_output.put_line('value of a is : ' || a); 
END; 
/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

a is less than 20 
value of a is : 10  

PL/SQL procedure successfully completed. 

Ví dụ 2

Hãy xem xét chúng ta có một bảng và một vài bản ghi trong bảng như chúng ta đã tạo trong Các loại biến PL / SQL

DECLARE 
   c_id customers.id%type := 1; 
   c_sal  customers.salary%type; 
BEGIN 
   SELECT  salary  
   INTO  c_sal 
   FROM customers 
   WHERE id = c_id; 
   IF (c_sal <= 2000) THEN 
      UPDATE customers  
      SET salary =  salary + 1000 
         WHERE id = c_id; 
      dbms_output.put_line ('Salary updated'); 
   END IF; 
END; 
/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

Salary updated  

PL/SQL procedure successfully completed. 

PL / SQL - Câu lệnh IF-THEN-ELSE

Một chuỗi các câu lệnh IF-THEN có thể được theo sau bởi một chuỗi câu lệnh ELSE tùy chọn , thực thi khi điều kiện là FALSE .

Cú pháp

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

IF condition THEN 
   S1;  
ELSE  
   S2; 
END IF;

Trong đó, S1 và S2 là chuỗi các câu lệnh khác nhau. Trong câu lệnh IF-THEN-ELSE , khi điều kiện kiểm tra là TRUE, câu lệnh S1 được thực thi và câu lệnh S2 bị bỏ qua; khi điều kiện kiểm tra là FALSE, thì S1 bị bỏ qua và câu lệnh S2 được thực hiện. Ví dụ -

IF color = red THEN 
  dbms_output.put_line('You have chosen a red car') 
ELSE 
  dbms_output.put_line('Please choose a color for your car'); 
END IF;

Nếu điều kiện biểu thức Boolean đánh giá là true, thì khối mã if-then sẽ được thực thi nếu không khối mã khác sẽ được thực thi.

Sơ đồ khối

PL / SQL câu lệnh if-then-else

Thí dụ

Hãy để chúng tôi thử một ví dụ sẽ giúp bạn hiểu khái niệm -

DECLARE 
   a number(3) := 100; 
BEGIN 
   -- check the boolean condition using if statement  
   IF( a < 20 ) THEN 
      -- if condition is true then print the following   
      dbms_output.put_line('a is less than 20 ' ); 
   ELSE 
      dbms_output.put_line('a is not less than 20 ' ); 
   END IF; 
   dbms_output.put_line('value of a is : ' || a); 
END; 
/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

a is not less than 20 
value of a is : 100  

PL/SQL procedure successfully completed. 

PL / SQL - Câu lệnh IF-THEN-ELSIF

Câu lệnh IF-THEN-ELSIF cho phép bạn chọn giữa một số lựa chọn thay thế. Một câu lệnh IF-THEN có thể được theo sau bởi một câu lệnh ELSIF ... ELSE tùy chọn . Mệnh đề ELSIF cho phép bạn thêm các điều kiện bổ sung.

Khi sử dụng câu lệnh IF-THEN-ELSIF , có một số điểm cần lưu ý.

  • Đó là ELSIF, không phải ELSEIF.

  • Một câu lệnh IF-THEN có thể không có hoặc một ELSE và nó phải đứng sau bất kỳ ELSIF nào.

  • Một câu lệnh IF-THEN có thể không có nhiều ELSIF và chúng phải đứng trước ELSE.

  • Sau khi ELSIF thành công, không có ELSIF hoặc ELSE nào còn lại sẽ được kiểm tra.

Cú pháp

Cú pháp của câu lệnh IF-THEN-ELSIF trong ngôn ngữ lập trình PL / SQL là:

IF(boolean_expression 1)THEN  
   S1; -- Executes when the boolean expression 1 is true  
ELSIF( boolean_expression 2) THEN 
   S2;  -- Executes when the boolean expression 2 is true  
ELSIF( boolean_expression 3) THEN 
   S3; -- Executes when the boolean expression 3 is true  
ELSE  
   S4; -- executes when the none of the above condition is true  
END IF; 

Thí dụ

DECLARE 
   a number(3) := 100; 
BEGIN 
   IF ( a = 10 ) THEN 
      dbms_output.put_line('Value of a is 10' ); 
   ELSIF ( a = 20 ) THEN 
      dbms_output.put_line('Value of a is 20' ); 
   ELSIF ( a = 30 ) THEN 
      dbms_output.put_line('Value of a is 30' ); 
   ELSE 
       dbms_output.put_line('None of the values is matching'); 
   END IF; 
   dbms_output.put_line('Exact value of a is: '|| a );  
END; 
/ 

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

None of the values is matching 
Exact value of a is: 100  

PL/SQL procedure successfully completed. 

PL / SQL - Câu lệnh CASE

Giống như câu lệnh IF , câu lệnh CASE chọn một chuỗi các câu lệnh để thực thi. Tuy nhiên, để chọn chuỗi, câu lệnh CASE sử dụng một bộ chọn thay vì nhiều biểu thức Boolean. Bộ chọn là một biểu thức, giá trị của nó được sử dụng để chọn một trong một số lựa chọn thay thế.

Cú pháp

Cú pháp cho câu lệnh trường hợp trong PL / SQL là:

CASE selector 
   WHEN 'value1' THEN S1; 
   WHEN 'value2' THEN S2; 
   WHEN 'value3' THEN S3; 
   ... 
   ELSE Sn;  -- default case 
END CASE;

Sơ đồ khối

câu lệnh trường hợp trong PL / SQL

Thí dụ

DECLARE 
   grade char(1) := 'A'; 
BEGIN 
   CASE grade 
      when 'A' then dbms_output.put_line('Excellent'); 
      when 'B' then dbms_output.put_line('Very good'); 
      when 'C' then dbms_output.put_line('Well done'); 
      when 'D' then dbms_output.put_line('You passed'); 
      when 'F' then dbms_output.put_line('Better try again'); 
      else dbms_output.put_line('No such grade'); 
   END CASE; 
END; 
/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

Excellent  

PL/SQL procedure successfully completed. 

PL / SQL - Câu lệnh CASE đã tìm kiếm

Câu lệnh CASE được tìm kiếm không có bộ chọn và các mệnh đề WHEN của câu lệnh chứa các điều kiện tìm kiếm cung cấp giá trị Boolean.

Cú pháp

Cú pháp cho câu lệnh trường hợp được tìm kiếm trong PL / SQL là:

CASE 
   WHEN selector = 'value1' THEN S1; 
   WHEN selector = 'value2' THEN S2; 
   WHEN selector = 'value3' THEN S3; 
   ... 
   ELSE Sn;  -- default case 
END CASE; 

Sơ đồ dòng chảy

câu lệnh trường hợp trong PL / SQL

Thí dụ

DECLARE 
   grade char(1) := 'B'; 
BEGIN 
   case  
      when grade = 'A' then dbms_output.put_line('Excellent'); 
      when grade = 'B' then dbms_output.put_line('Very good'); 
      when grade = 'C' then dbms_output.put_line('Well done'); 
      when grade = 'D' then dbms_output.put_line('You passed'); 
      when grade = 'F' then dbms_output.put_line('Better try again'); 
      else dbms_output.put_line('No such grade'); 
   end case; 
END; 
/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

Very good  

PL/SQL procedure successfully completed. 

PL / SQL - Câu lệnh IF-THEN-ELSE lồng nhau

Việc lồng các câu lệnh IF-ELSE luôn hợp pháp trong lập trình PL / SQL , có nghĩa là bạn có thể sử dụng một câu lệnh IF hoặc ELSE IF bên trong (các) câu lệnh IF hoặc ELSE IF khác .

Cú pháp

IF( boolean_expression 1)THEN 
   -- executes when the boolean expression 1 is true  
   IF(boolean_expression 2) THEN 
      -- executes when the boolean expression 2 is true  
      sequence-of-statements; 
   END IF; 
ELSE 
   -- executes when the boolean expression 1 is not true 
   else-statements; 
END IF; 

Thí dụ

DECLARE 
   a number(3) := 100; 
   b number(3) := 200; 
BEGIN 
   -- check the boolean condition  
   IF( a = 100 ) THEN 
   -- if condition is true then check the following  
      IF( b = 200 ) THEN 
      -- if condition is true then print the following  
      dbms_output.put_line('Value of a is 100 and b is 200' ); 
      END IF; 
   END IF; 
   dbms_output.put_line('Exact value of a is : ' || a ); 
   dbms_output.put_line('Exact value of b is : ' || b ); 
END; 
/ 

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

Value of a is 100 and b is 200 
Exact value of a is : 100 
Exact value of b is : 200  

PL/SQL procedure successfully completed. 
=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
PL/SQL, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master