Đồ án Tìm hiểu về PL/SQL

1. VARCHAR2 (Chiều dài tối đa) - Lưu dữ liệu kí tự có chiều dài thay đổi. - Chiều dài tối đa là 32767 byte - Không sử dụng một hằng hay một biến để chỉ định chiều dài tối đa. Sử dụng một số nguyên dương cho việc khai báo này. - Chiều rộng tối đa của một cột trong cơ sở dữ liệu này là 4000 bytes 2. CHAR (Chiều dài tối đa) - Lưu dữ liệu dạng kí tự chiều dài cố định (có thể bỏ trống nếu cần thiết) - Chiều dài tối đa là 32767 byte - Không sử dụng một hằng hay một biến để chỉ định chiều dài tối đa. Sử dụng một số nguyên dương cho việc khai báo này. Nếu chiều dài tối đa không được xác định thì giá trị mặc định là 1 - Chiều rộng tối đa của một cột trong cơ sở dữ liệu này là 2000 bytes, giá trị mặc định là 1. 3. NUMBER (m, n) - Lưu trữ số nguyên hay số thập phân có chiều dài cố định. - m là tổng số chữ số. - n số số lẻ - Có thể xác định thông số m, bỏ qua thông số n. Trong trường hợp này số n sẽ được xem là 0 và chỉ có số nguyên mới được phép lưu trữ. - Không sử dụng một hằng hay một biến để chỉ định chiều dài tối đa. Sử dụng một số nguyên dương cho việc khai báo này. - m có giá trị tối đa là 38 chữ số. - n nằm trong khoảng -84 đến 127 - n có thể là số âm, nếu n là số âm nó sẽ làm tròn phần nguyên. Ví dụ như nếu n là -3 thì số 3456 sẽ được làm tròn thành 3000; nếu không xác định thì giá trị n sẽ là 0.

doc70 trang | Chia sẻ: tuandn | Lượt xem: 3328 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đồ án Tìm hiểu về PL/SQL, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC KHOA HỌC TỰ NHIÊN BỘ MÔN HTTT - KHOA CÔNG NGHỆ THÔNG TIN -----š›&š›----- BÁO CÁO ĐỒ ÁN LÍ THUYẾT Đề tài 3: TÌM HIỂU VỀ PL/SQL Giáo Viên Hướng Dẫn: Tuấn Nguyên Hoài Đức Mục lục Các kiểu dữ liệu trong Oracle và cách thức sử dụng Các kiểu dữ liệu VARCHAR2 (Chiều dài tối đa) Lưu dữ liệu kí tự có chiều dài thay đổi. Chiều dài tối đa là 32767 byte Không sử dụng một hằng hay một biến để chỉ định chiều dài tối đa. Sử dụng một số nguyên dương cho việc khai báo này. Chiều rộng tối đa của một cột trong cơ sở dữ liệu này là 4000 bytes CHAR (Chiều dài tối đa) Lưu dữ liệu dạng kí tự chiều dài cố định (có thể bỏ trống nếu cần thiết) Chiều dài tối đa là 32767 byte Không sử dụng một hằng hay một biến để chỉ định chiều dài tối đa. Sử dụng một số nguyên dương cho việc khai báo này. Nếu chiều dài tối đa không được xác định thì giá trị mặc định là 1 Chiều rộng tối đa của một cột trong cơ sở dữ liệu này là 2000 bytes, giá trị mặc định là 1. NUMBER (m, n) Lưu trữ số nguyên hay số thập phân có chiều dài cố định. m là tổng số chữ số. n số số lẻ Có thể xác định thông số m, bỏ qua thông số n. Trong trường hợp này số n sẽ được xem là 0 và chỉ có số nguyên mới được phép lưu trữ. Không sử dụng một hằng hay một biến để chỉ định chiều dài tối đa. Sử dụng một số nguyên dương cho việc khai báo này. m có giá trị tối đa là 38 chữ số. n nằm trong khoảng -84 đến 127 n có thể là số âm, nếu n là số âm nó sẽ làm tròn phần nguyên. Ví dụ như nếu n là -3 thì số 3456 sẽ được làm tròn thành 3000; nếu không xác định thì giá trị n sẽ là 0. BINARY-INTERGER Lưu trữ biến nguyên có dấu So sánh với kiểu dữ liệu NUMBER, kiểu BINARY-INTERGER được lưu trữ dạng nhị phân nên tốn ít chỗ hơn Tính toán nhanh hơn Có thể lưu trữ bất cứ số nguyên nào trong phạm vi -2147483747 đến 2147483747. Kiểu dữ liệu chính trong việc làm chỉ mục đối với các bảng trang PL/SQL. DATE Lưu trữ các giá trị ngày có chiều dài cố định Giá trị hợp lệ từ 1/1/4712 trước công nguyên đến 31/12/9999 sau công nguyên Khi lưu trữ một cột trong cơ sở dữ liệu, giá trị ngày bao gồm cả thời gian tính bằng giây. Các ngày được tự động sắp xếp theo dạng nhị phân và sẽ được thể hiện tùy theo định dạng. TIMESTAMP Đây là kiểu dữ liệu mới trong Oracle 9i, là phần mở rộng của kiểu dữ liệu DATE. Nó lưu trữ các giá trị ngày có chiều dài cố định, có độ chính xác bằng giây đến 9 số lẻ (mặc định là 6 số lẻ). Sau đây là ví dụ đối với kiểu dữ liệu: ’12-JAN-2002 09.51.44.000000 PM Tùy chọn “with timezone” hoặc “with local timezone” cho phép TIMESTAMP liên quan đến một muối giờ cụ thể. Tùy chọn này sẽ được điều chỉnh cho phù hợp với múi giờ của cơ sở dữ liệu. BOOLEAN Chỉ lưu trữ những giá trị TRUE hoặc FALSE và giá trị khác NULL. Chỉ có các giá trị TRUE, FALSE và khác NULL có thể được gán cho các biến kiểu BOOLEAN. Các giá trị TRUE, FALSE không thể chèn vào cột trong cơ sở dữ liệu. LONG Lưu trữ các chuỗi kí tự có chiều dài thay đổi. Kiểu dữ liệu LONG giống như kiểu dữ liệu VARCHAR2, ngoại trừ chiều dài của kiểu dữ liệu LONG là 2 GigaBytes. Bạn không thể chọn một giá trị dài hơn 4000 bytes từ một cột có kiểu LONG vào một biến có kiểu LONG Các cột có kiểu LONG có thể lưu trữ văn bản, các dãy kí tự hay các tài liệu ngắn. Bạn có thể tham chiếu đến một kiểu LONG trong các phát biểu UPDATE, INSERT, và SELECT nhưng không thể thực hiện điều này trong các biểu thức, các lời gọi hàm SQL nào đó, chẳng hạn như Where, Group By và Connect By. LONG RAW Lưu trữ dữ liệu của các biến nhị phân nguyên thủy có chiều dài thay đổi lên đến 2 Gigabytes LOB (Large Object) Có 4 loại LOBS: BLOB, CLOB, NCLOB và BFILE. Các loại này dùng để lưu trữ các đối tượng nhị phân. Ví dụ như hình ảnh hoặc các tập tin Video có chiều dài tới 4 gigabytes. Bfile là một tập tin nhị phân lớn được lưu trữ bên ngoài cơ sở dữ liệu, kích thước tối đa là 4 giagbytes. ROWD Nội tại bên trong mỗi bảng của cơ sở dữ liệu Orcle có một cột ROWID, dùng để lưu các giá trị nhị phân. Rowid xác định một dùng duy nhất và cung cấp cho bạn cách nhanh nhất để truy xuất tới một dòng cụ thể nào đó. Khi bạn lấy một giá trị Rowid vào một biến ROWID, bạn nên sử dụng hàm ROWIDTOCHAR, hàm này sẽ chuyển giá trị nhị phân thành chuỗi kí tự 18-byte và trả về theo định dạng đó. Cách sử dụng: PL/SQL chấp nhận các kiểu kí tự khác nhau vì chúng có ý nghĩa khác nhau và vì thế việc sử dụng và xử lí chúng cũng khác nhau. Sử dụng các biến PL/SQL: Các biến có thể sử dụng để chứa giá trị trung gian. Cú pháp: [Gán giá trị ban đầu (tùy chọn)] Các biến có thể được xem như các định danh. Có một số giới hạn mà bạn cần làm quen: Tên bắt đầu bằng một kí tự và tối đa là 30 kí tự. Ví dụ: v_student_id, v_last_name, V_FIRST_NAME, apt_# Chú ý: Oracle không phân biệt hoa thường nên v_last_name và V_LAST_NAME là giống nhau. Các biến sau đây là không hợp lệ: X+Y -> có chứa dấu “+” là kí hiệu toán học trong PL/SQL 1st_year -> bắt đầu bằng một số Student ID -> có chứa khoảng trắng Sử dụng các từ dành riêng của PL/SQL: Các từ dánh riêng là các từ mà PL/SQL dành ra để sử dụng cho chính nó như: Begin, End, Select. Bạn không thể sử dụng các từ dành riêng này để đặt tên cho các biến hoặc các ngoại lệ do người dùng chỉ định. Ví dụ: + Xét: SET SERVEROUTPUT ON; Declare v_exception VARCHAR2(50); Begin v_exception := 'This is a test'; dbms_output.put_line(v_exception); end; + Kết quả: anonymous block completed This is a test + Xét: SET SERVEROUTPUT ON; Declare exception VARCHAR2(50); Begin exception := 'This is a test'; dbms_output.put_line(exception); end; + Kết quả: Error starting at line 2 in command: ……. Sử dụng định danh trong PL/SQL: Xét ví dụ: SET SERVEROUTPUT ON; DECLARE v_var1 VARCHAR2(20); v_var2 VARCHAR2(6); v_var3 NUMBER(5,3); BEGIN v_var1 := ‘string literal’; v_var2 := ’12.345’; v_var3 := 12.345; dbms_output.put_line('var 1 : '||v_var1); dbms_output.put_line('var 2 : '||v_var2); dbms_output.put_line('var 3 : '||v_var3); END; Kết quả thu được sẽ là: anonymous block completed var 1 : string literal var 2 : 12.34 var 3 : 12.345 Sử dụng kiểu dữ liệu đối tượng: Kiểu dữ liệu mà bạn gán cho một biến có thể dựa trên một đối tượng cơ sở dữ liệu. Cách khai báo này gọi là khai báo đối tượng và kể từ đó biến này phụ thuộc vào đối tượng này. Khi kiểu dữ liệu của đối tượng đó thay đổi, bạn không cần phải cập nhật lại PL/SQL của mình. Cú pháp: .%TYPE Kiểu thuộc tính tham chiếu tới một cột trong cơ sở dữ liệu. Khai báo và khởi tạo giá trị ban đầu cho các biến: Trong PL/SQL, các biến phải được khai báo trước khi được tham chiếu. Điều này được thực hiện trong phần khai báo của khối PL/SQL. Nên nhớ rằng, mỗi phần khai báo phải kết thúc bằng dấu “;”. Các biến có thể được gán một giá trị bằng cách sử dụng toán tử “:=”. Nếu bạn khai báo một biến là một hằng, nó sẽ giữ nguyên giá trị trong toàn khối PL/SQL đó. Để làm việc này, bạn phải cung cấp cho nó một giá trị trong phần khai báo. Ví dụ: v_dongia NUMBER := 1500; v_counter NUMBER := 0; Các biến của PL/SQL được liên kết với nhau bởi các biểu thức và các toán tử. Một biểu thức là một dãy các biến, phân cách với nhau bằng các toán tử. Các biểu thức này được sử dụng để điều khiển dữ liệu, thực hiện các phép toán và so sánh dữ liệu. Các biểu thức bao gồm các toán hạng và các toán tử. Một toán hạng là một thông số của toán tử, nó có thể là một biến, một hằng hay một lời gọi hàm. Một toán tử là các thao tác được chỉ định như: +,**, /,… Ví dụ: v_counter := ((v_num + 5) * 2) / 2; v_new_cost := (v_old_cost * v_counter) / 4; Phạm vi của một khối, các khối lồng nhau và các nhãn: Phạm vi của biến: Phạm vi còn được gọi là sự tồn tại, được định nghĩa trong phần khai báo là cục bộ đối với khối đó. Khối đó còn cho biết phạm vi của ngoại lệ đã được khai báo và kích hoạt. Phạm vi của biến là phần chương trình mà biến đó có thể được truy xuất hoặc có thể nhìn thấy biến đó. Nó luôn luôn bắt đầu từ phần khai báo cho tới cuối khối mà biến đó được khai báo. Tấm nhìn của một biến là phần chương trình mà biến đó có thể được truy xuất. Begin --Khối ngoài Begin --Khối trong ...; End; --kết thúc khối trong End; --kết thúc khối ngoài Các nhãn và các khối lồng nhau: Các nhãn có thể được thêm vào một khối đểlàm cho khối lệnh đó dễ đọc và hạn chế các thành phần trùng tên trong các khối lồng nhau. Tên của khối phải được đặt ở dòng đầu tiên của khối lệnh có thể thực thi được (Begin hay Declare) như sau: Set serveroutput on; > BEGIN DBMS_OUTPUT.PUT_LINE(‘the procedure find_stu_num has been excuted.’); END find_stu_num; Tên nhãn xuất hiện tùy ý sau từ khóa END. Các khối có thể lồng nhau trong phần khối lệnh chính hoặc phần xử lí ngoại lệ. Khối lồng nhau là khối được đặt toàn bộ bên trong khối khác. Điều này tác động lên phạm vi và tầm nhìn của các biến. Phạm vi của một biến trong một khối lồng nhau là khoảng thời gian khi bộ nhớ được cấp phát cho biến đó và kéo dài từ lúc khai báo đến từ khóa END của khối lồng đó Các hàm tiện ích để xử lý kiểu dữ liệu số, chuỗi và thời gian Dữ liệu số: Đầu vào và đầu ra là các giá trị kiểu số. Hàm SQL Diễn giải ROUND(n[,m]) Cho giá trị làm tròn của n (đến cấp m, mặc nhiên m=0) TRUNC(n[,m]) Cho giá trị n lấy m chữ số tính từ chấm thập phân CEIL(n) Cho số nguyên nhỏ nhất lớn hơn hoặc bằng n FLOOR(n) Cho số nguyên lớn nhất bằng hoặc nhỏ hơn n POWER(m,n) Cho lũy thừa bậc n của m EXP(n) Cho giá trị của e^n SQRT(n) Cho căn bậc 2 của n, n>=0 SIGN(n) Cho dấu của n. n<0 có SIGN(n)= -1 n=0 có SIGN(n)= 0 n>0 có SIGN(n)= 1 ABS(n) Cho giá trị tuyệt đối MOD(m,n) Cho phần dư của phép chia m cho n LOG(m,n) Cho logarit cơ số m của n SIN(n) Trả về sin của n COS(n) Trả về cosin của n TAN(n) Trả về tan của n Dữ liệu chuỗi Hàm SQL Diễn giải CONCAT(char 1, char 2) Cho kết hợp của 2 chuỗi ký tự, tương tự như sử dụng toán tử || INITCAP(char) Cho chuỗi với ký tự đầu các từ là ký tự hoa LOWER(char) Cho chuỗi ký tự viết thường (không viết hoa) LPAD(char1, n [,char2]) Cho chuỗi ký tự có chiều dài bằng n. Nếu chuỗi char1 ngắn hơn n thì thêm vào bên trái chuỗi char2 cho đủ n ký tự. Nếu chuỗi char1 dài hơn n thì giữ lại n kí tự tính từ trái sang LTRIM(char1, n [,char2]) Bỏ các ký tự trống bên trái NLS INITCAP(char) Cho chuỗi với ký tự đầu các từ là chữ hoa, các chữ còn lại là chữ thường REPLACE(char, search[,replacement string]) Thay tất cả các chuỗi search_string có trong chuỗi char bằng chuỗi replacement_string. RPAD(char1, n[,char2]) Giống LPAD(char1, n [,char2]) nhưng căn phải RTRIM(char1, n [,char2]) Bỏ các ký tự trống bên phải SOUNDEX(char) Cho chuỗi đồng âm của char SUBSTR(char, m [,n]) Cho chuỗi con của chuỗi char lấy từ vị trí m vế phải n ký tự, nếu không chỉ n thì lấy cho đến cuối chuỗi TRANSLATE(char, from, to) Cho chuỗi trong đó mỗi ký tự trong chuỗi from thay bằng ký tự tương ứng trong chuỗi to, những ký tự trong chuỗi from không có tương ứng trong chuỗi to sẽ bị loại bỏ. UPPER(char) Cho chuỗi chữ hoa của char ASCII(char) Cho ký tự ASCII của byte đầu tiên của chuỗi char INSTR(char1, char2 [,n[,m]]) Tìm vị trí chuỗi char2 trong chuỗi char1 bắt đầu từ vị trí n, lần xuất hiện thứ m. LENGTH(char) Cho chiều dài của chuỗi char Dữ liệu thời gian Hàm SQL Diễn giải MONTH_BETWEEN(d1, d2) Cho biết số tháng của ngày d1 và d2 ADD_MONTH(d, n) Cho ngày d, thêm n tháng NEXT_DAY(d, char) Cho ngày tiếp theo ngày d có thứ char LAST_DAY(d) Cho ngày cuối cùng trong tháng chỉ bởi d * Một số hàm khác áp dụng cho kiểu ngày: Hàm SQL Diễn giải ROUND(date1) Trả về ngày date 1 tại thời điểm giữa trưa 12:00 AM ROUND(date1,’MONTH’) Nếu date 1 nằm trong nửa tháng đầu trả về ngày đầu tiên của thàng, ngược lại sẽ trả về ngày đầu tiên của tháng sau ROUND(date1,’YEAR’) Nếu date 1 nằm trong nửa năm đầu trả về ngày đầu tiên của thàng, ngược lại sẽ trả về ngày đầu tiên của năm sau TRUNC(date1, ’MONTH’) Trả về ngày đầu tiên của tháng chứa date1 TRUNC(date1, ’YEAR’) Trả về ngày đầu tiên của năm chứa date1 Các hàm chuyển đổi kiểu Hàm SQL Diễn giải TO_CHAR(number|date, ‘fmt’) Chuyển kiểu số và ngày về kiểu ký tự. TO_NUMBER(char) Chuyển ký tự có nội dung số sang số TO_DATE(‘chsr’,’fmt’) Chuyển ký tự sang kiểu ngày với định dạng đặt trong fmt DECODE(EXPR,SEARCH1,RESULT1,SEARCH2,RESULT2,DEFAULT): So sánh biểu thức expr với giá trị search nếu đúng trả về giá trị result nếu không trả về giá trị default NVL(COL|VALUE, VAL) Chuyển giá trị COL|VALUE thành val nếu null. Greatest(col|value1,col, value2) Trả giá trị lớn nhất trong dãy giá trị. * Các khuông dạng ngày Hàm SQL Diễn giải SCC hoặc CC Thế kỷ; S chỉ ngày BC YYYY hoặc SYYYY Năm; S chỉ ngày BC YYY, YY, Y Chỉ năm với 3,2,1 ký tự số IYYY, IYY, IY, I Chỉ năm theo chuẩn ISO SYEAR, YEAR Chỉ năm theo cách phát âm của người anh Q Quý trong năm MM Giá trị tháng với 2 số (01-12) MONTH Tên đầy đủ của tháng theo tiếng anh, đọ dài 9 MON Tháng với 3 ký tự viến tắt (JAN, FEB...) WW, W Tuần trong năm hoặc trong tháng DDD, DD, D Ngày trong năm, tháng hoặc tuần DAY Chỉ thứ trong tuần DY Chỉ thứ trong tuần với 3 ký tự viết tắt J Ngày Julian; bắt đầu từ ngày 31/12/4713 trước công nguyên AM, PM Chỉ định sáng, chiều HH, HH12 HH24 Chỉ giờ trong ngày (1-12) hoặc (0-23) MI Phút (0-59) SS Giây (0-59) SSSSS Số giây đến nửa đêm (0-86399) / . , - được tự động thêm khi đặt trong khuôn dạng “char” Đoạn ký tự đặt trong nháy đúp được tự động thêm khi đặt trong khuôn dạng TH Thêm phần thứ tự (1st, 2nd, 4th ) SP Phát âm số ( FOUR với DDSP) SPTH, THSP Phát âm và chuyển sang dạng thứ tự ( First, second, ...) RR Ngày chuyển giao thiên niên kỷ với các năm <1999 * Một số khuôn dạng số: Ký tự Diễn giải Ví dụ Kết quả 9 Xác định hiển thị 1 số 999999 1234 0 Hiển thị cả số 0 ở đầu nếu độ dài khuôn dạng lớn hơn số hiện có 099999 001234 $ Thêm ký tự tiền tệ $999999 $1234 L Thêm ký tự tiền tệ bản địa L999999 FF1234 . Dấu thập phân 999999.99 1234.00 , Dấu phân cách phần nghìn 999,999 1,234 MI Dấu âm ở bên phải ( với các giá trị âm) 999999MI 1234- PR Thêm ngoặc nhọn vào các giá trị âm 999999PR EEE Chuyển sang hiển thị số E 99.9999RRRR 1.234E+03 V Nhân với 10 n, n là số các số 9 đặt sau V 9999V99 123400 B Hiển thị cả giá trị 0 nếu = 0 B9999.99 1234.00 Các cấu trúc điều khiển: Điều khiển có điều kiện: Phát Biểu IF: Phát biểu IF có 2 dạng: IF – THEN và IF – THEN – ELSE. Một phát biểu IF – THEN cho phép bạn chỉ định chỉ một nhóm các hành động nào đó được thực hiện. Có nghĩa là, nhóm hành động này chỉ thực hiện nếu điều kiện là đúng (TRUE). Phát biểu IF – THEN – ELSE cho phép bạn chỉ định 2 nhóm hành động, trong đó nhóm hành động thức 2 được thực hiện khi điều kiện đánh giá là sai (FALSE hoặc NULL). If – Then: Phát biểu If – Then là loại điều khiển có điều kiện căn bản nhất, phát biểu này có cấu trúc như sau: IF Condition THEN Phát biểu 1; … Phát biểu n; END IF; Từ khóa IF đánh dấu nơi bắt đầu phát biểu IF. Phát biểu 1 – n là các phát biểu được thực thi tuần tự, nó phù hợp với hầu hết các cấu trúc lập trình chuẩn. Từ khóa Condition nằm giữa hai từ khóa IF và THEN xác định xem các phát biểu này có được thực thi hay không. END IF là từ khóa chỉ ra điểm kết thúc cho cấu trúc IF THEn. Sơ đồ mình họa cho cấu trúc của phát biểu IF THEN: Khi một phát biểu IF THEN được thực thi, một điều kiện được đánh giá là True hay False. Nếu là True, điều khiển sẽ được chuyển tới các phát biểu có thể thực thi đầu tiên của cấu trúc IF THEN. Nếu là False, điều khiển sẽ được chuyển tới phát biểu có thể thực thi đầu tiên sau cấu trúc IF THEN. Xem ví dụ sau: bạn có 2 giá trị số được lưu trữ trong 2 biến v_num1 và v_num2. Bạn cần xếp các giá trị của mình, vì thế số nhỏ hơn luôn luôn được lưu trữ trong v_num1 và số lớn hơn được lưu trữ trong v_num2. Ví Dụ: DECLARE v_num1 NUMBER :=5; v_num2 NUMBER :=3; v_temp NUMBER; BEGIN --Nếu v_num1 lớn hơn v_num2 thì hoán đổi giá trị của chúng cho nhau IF v_num1 > v_num2 THEN v_temp := v_num1; v_num1:= v_num2; v_num2 := v_temp; END IF; --Hiển thị giá trị của v_num1 và v_num2 DBMS_OUTPUT.PUT_LINE (‘v_num1 =’||v_num1); DBMS_OUTPUT.PUT_LINE (‘v_num2 =’||v_num2); END; Trong ví dụ này điều kiện v_num1>v_num2 được tính và cho kết quả là TRUE bởi vì 5>3. Kế tiếp giá trị được sắp xếp lại, 3 được gán cho v_num1 và 5 được gán cho v_num2. Điều này được thực hiện với sự hổ trợ của biến v_temp. Biến này được sữ dụng như là nơi lưu trữ tạm thời. Kết quả kết xuất của ví dụ này như sau: v_num1 = 3; v_num2 = 5; PL/SQL Procedure successfully completed If – Then – Else: Phát biểu IF THEN xác định chuỗi các phát biểu chỉ được thực thi khi kết quả của điều kiện là TRUE, ngược lại nếu là FALSE thì sẽ không có phát biểu nào được thực hiện. Phát biểu IF – Then – Else cho phép bạn chỉ định 2 nhóm phát biểu. Một nhóm được thực thi khi điều kiện đúng, và nhóm kia thì được thực thi khi điều kiện sai. Điều này được minh họa như sau: IF Condition THEN Phát biểu 1; ELSE Phát biểu 2; END IF Phát biểu 3; Khi điều kiện được đánh giá là TRUE, điều khiển đươc chuyển tới phát biểu 1, nếu là FALSE, điều khiển được chuyển tới phát biểu 2. Sau khi cấu trúc của phát biểu IF – Then – Else hoàn tất, phát biểu 3 được thực thi. Điều này được minh họa trong hình sau: Cấu trúc IF – Then – Else nên được sử dụng khi có sự lựa chọn giữa 2 hành động. Xem ví dụ sau: DECLARE v_num NUMBER := &sv_user_num; BEGIN --Kiểm tra nếu số được người sử dụng cung cấp là số chẳn IF MOD(v_num,2) = 0 THEN DBMS_OUTPUT.PUT_LINE( v_num|| ‘la so chan’); ELSE DBMS_OUTPUT.PUT_LINE( v_num|| ‘la so le’); END IF; DBMS_OUTPUT.PUT_LINE(‘Hoan Thanh’); END; Khi chạy, ví dụ này sẽ xuất ra kết quả như sau: Enter value for v_user_num: 24 old 2: v_num NUMBER :=&v_user_num; new 2: v_num NUMBER := 24; 24 la so chan Hoan Thanh Điều Kiện Null: Trong một số trường hợp, điều kiện sử dụng trong phát biểu IF có thể được đánh giá là NULL thay vì TRUE hay FALSE. Đối với cấu trúc IF THEN, phát biểu sẽ không được thực thi nếu điều kiện được đánh giá là NULL. Kế tiếp điều khiển sẽ được chuyển tới phát biểu đầu tiên sau từ khóa END. Đối với cấu trúc IF THEN ELSE, các phát biểu được chỉ định sau từ khóa ELSE sẽ được thực thi, nếu điều kiện đánh giá là NULL. Ví dụ: DECLARE v_num1 NUMBER := 0; v_num2 NUMBER; BEGIN IF v_num1 = v_num2 THEN DBMS_OUTPUT.PUT(‘v_num1 = v_num2’); ELSE DBMS_OUTPUT.PUT(‘v_num1 != v_num2’); END IF; END; Ví dụ này sẽ cho kết quả sau: v_num1 != v_num2 PL/SQL procedure successfully completed Điều kiện v_num1 = v_num2cho kết quả là NULL bởi bị không có giá trị nào được gáj cho v_num2. Lưu ý là cấu trúc IF THEN ELSE này được tính như điều kiện được đánh giá là FALSE. Khi đó phát biểu DBMS_OUTPUT.PUT_LINE thứ 2 được thực thi. Phát Biểu ELSEIF: Một phát biểu ELSIF có cấu trúc như sau: IF Điều kiện 1 THEN Phát biểu 1; ELSIF Điều kiện 2 THEN Phát biểu 2; ELSIF Điều kiện 3 THEN Phát biểu 3; … ELSE Phát biểu n; END IF; Từ khóa IF đánh dấu điểm bắt đầu của cấu trúc ELSIF. Các từ Điều kiện 1 đến n là các điều kiện được trả về một trong hai giá trị TRUE hoặc FALSE, chúng độc lập nhau. Điều này có nghĩa là nếu điều kiện 1 được đánh giá là TRUE, phát biểu 1 sẽ được thực thi, rồi điều khiển được chuyển tới phát biểu có thể thực thi được sau từ khóa END IF. Phần còn lại của cấu trúc ELSIF bị bỏ qua. Khi điều kiện 1 được đánh giá là FALSE, điều khiển được chuyển tới phần ELSIF có điều kiện 2 và điều kiện này sẽ được đánh giá, v.v…Nếu không có điều kiện nào TRUE điều khiển sẽ chuyển tới phần ELSE của cấu trúc ELSIF. Một phát biểu ELSIF có thể chứa số mệnh đề ELSIF không hạn chế. Lưu đồ của phát biểu được minh họa như hình sau: Hình trên trình bày nếu điều kiện 1 được đánh giá là TRUE, phát biểu 1 được thực thi và điều khiển được chuyển tới phát biểu đầu tiên sau từ khó END IF. Nếu điều kiện 1 được đánh giá là FALSE, điều khiển sẽ chuyển tới điều kiện 2. Nếu đ