Mục lục I Các kiSu dGD Ii0u Oracle cách thElc S0 d!3ng Các ki(3u A d(3 litĩlu VARCHAR2 (Chiều dài tối đa) CHAR (Chiều dài tối đa) NUMBER (m, n) 4 BINARY-INTERGER DATE TIMESTAMP .5 BOOLEAN LONG LONG RAW 10 LOB (Large Obịect) 11 ROWD .6 Cách sin B d0ng: Sử dụng biến PL/SQL: Sử dụng tù’ dành riêng PL/SQL: Sử dụng định danh PL/SQL: Sứ dụng kiêu liệu đối tượng: Khai báo khởi tạo giá trị ban đầu .cho biến: Phạm vi khối, khối lồng nhãn: II Các hàm tilHn ích đ0 X0 lý kimu d0 IÌ0U S0, chu0i thEi gian Dữ liệu số: Đầu vào đầu .giá trị kiêu số Dừ liệu chuỗi 10 Dừ liệu thời gian 11 Các hàm chuyên đôi kiêu 11 ©B0 môn HTTT - Khoa CNTT - ĐH Khoa H13c T0 Nhiên 8 Phát Biểu ELSEIF: 18 Các Phát biểu IF Lồng Nhau: 22 Case: 25 CASE EXPESSION: 33 NULL IF Và COALESCE: 37 B ĐÌ0U khi0n I0p: 42 Vòng lặp đơn giản: 43 Vòng lặp WHILE .45 Vòng lặp FOR dạng số .46 Các vòng lặp lồng 48 IV CURSOR Error! Bookmark not defined A Cursor thao tác Cursor: 48 Định nghĩa : 48 Thao tác Cursor: 48 Tìm hiêu loại Cursor: 49 Bảng thuộc tính: .51 Lưu ý Cursor : 52 Bài tập Ví dụ : 52 Cách dùng Cursor kết họp với vòng lặp FOR Cursor lồng nhau: .54 Tha t@c hàm 56 V A Th@t@c 56 Gọi thủ tục 57 Lệnh RETƯRN 58 B Hàm 58 Kiếu dừ liệu trả 60 Gọi hàm 61 Lệnh RETƯRN 61 c Tham S0 cho th0 t0c hàm 61 Định nghĩa tham số 62 Tham số hình thức tham số thật (còn gọi đối số truyền vào) 63 ©B0 môn HTTT - Khoa CNTT - ĐH Khoa H0c T0 Nhiên I Các kilĩlu dl?l Mu Oracle cách tMc sE dmng A Các kiẼlu dm Mu VARCHAR2 (ChiEu dài mi đa) - Lưu liệu kí tự’ có chiều dài thay đối - Chiều dài tối đa 32767 byte - Không sử dụng hay biến đế định chiều dài tối đa Sử dụng số nguyên dương cho việc khai báo - Chiều rộng tối đa cột sở liệu 4000 bytes CHAR (Chi0u dài tmi đa) - Lưu liệu dạng kí tự’ chiều dài cố định (có bỏ trống cần thiết) - Chiều dài tối đa 32767 byte - Không sử dụng hay biến đế định chiều dài tối đa Sử dụng số nguyên dương cho việc khai báo Neu chiều dài tối đa không xác định giá trị mặc định - Chiều rộng tối đa cột sở liệu 2000 bytes, giá trị mặc định lài NUMBER (m, n) - Lưu trù’ số nguyên hay số thập phân có chiều dài cố định - m tổng số chữ số - n số số lẻ - Có xác định thông số m, bở qua thông số n Trong trường hợp số n xem có số nguyên phép luu trữ - Không sử dụng hay biến đế định chiều dài tối đa Sử dụng số nguyên dương cho việc khai báo - m có giá trị tối đa 38 chữ số - n nằm khoảng -84 đến 127 - n số âm, n số âm làm tròn phần nguyên Ví dụ ©B0 môn HTTT - Khoa CNTT - ĐH Khoa H0C T0 Nhiên - Tính toán nhanh - Có thể lưu trữ số nguyên phạm vi -2147483747 đến 2147483747 - Kiếu liệu việc làm mục đổi với bảng trang PL/SQL - DATE - Lưu trữ giá trị ngày có chiều dài cố định - Giá trị nguyên - Khi lưu trữ cột gian tính giây - Các ngày tự động xếp theo dạng nhị phân thể tùy theo định dạng - TIMESTAMP - Đây kiểu liệu Oracle 9i, phần mở rộng kiểu liệu DATE Nó lun trữ giá trị ngày có chiều dài cố định, có độ xác giây đến số lẻ (mặc định số lẻ) Sau ví dụ kiểu liẹu: ’12-JAN-2002 09.51.44.000000 PM - Tùy chọn “with timezone” “with local timezone” cho phép TIMESTAMP liên quan đến muối cụ thể Tùy chọn điều chỉnh cho phù hợp với múi sở liệu - BOOLEAN - Chỉ lưu trữ giá trị TRUE FALSE giá trị khác NULL - Chỉ có giá trị TRUE, biến kiểu BOOLEAN - Các giá trị TRUE, FALSE chèn vào cột sở liệu - LONG - Lưu trù’ chuỗi kí tụ’ có chiều dài thay đối - Kiểu liệu LONG giống kiểu chiều dài kiếu liệu LONG GigaBytes - Bạn không the chọn giá LONG vào biến có kiểu LONG - hợp lệ từ 1/1/4712 trước công nguyên đến 31/12/9999 sau sở liệu, giá trị ngày bao gồm FALSE trị khác dài NULL 4000 liệu VARCHAR2, bytes tù' công thời gán cho ngoại trừ cột có kiếu Các cột có kiểu LONG lưu trữ văn bản, dãy kí tự hay tài ©B0 môn HTTT - Khoa CNTT - ĐH Khoa H0C T0 Nhiên 5 LONG RAW - Lưu trữ liệu biến nhị phân nguyên thủy có chiều dài thay đổi lên đến Gigabytes LOB (Large Obịect) Co loại LOBS: BLOB, CLOB, NCLOB BFILE Các loại dùng đế lưu trữ đổi tượng nhị phân Ví dụ hình ảnh tập tin Video có chiều dài tới gigabytes ROWD - - Nội bên mồi bảng sở liệu Orcle có cột ROWID, dùng đế lun giá trị nhị phân - Rowid xác định dùng cung cấp cho bạn cách nhanh để truy xuất tới dòng cụ thể - Khi bạn lấy giá trị Rowid vào biến ROWID, bạn nên sử dụng hàm ROWIDTOCHAR, hàm chuyến giá trị nhị phân thành chuỗi kí tự 18-byte trả theo định dạng B Cách S0 díĩlng: PL/SQL chấp nhận kiếu kí tự khác chúng có ý nghĩa khác việc sử dụng xử lí chúng khác SE dlSng biHln PL/SQL: - Các biến 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 xem định danh Có sổ giới hạn mà bạn cần làm quen: Tên bắt đầu kí tự’ tối đa 30 kí tự o Ví dụ: v student id, vlastname, V_FIRST_NAME, apt_# - Chú ý: Oracle không phân biệt hoa thường nên v last name V LAST NAME giống - Các biến sau không hợp lệ: o X+Y -> có chứa dấu “+” kí hiệu toán học PL/SQL o st year -> bắt đầu số ©B0 môn HTTT - Khoa CNTT - ĐH Khoa H0C T0 Nhiên + Xét: + Xét: SET SERVEROUTPUT Declare v exception Begin SETON; SERVEROUTPUT Declare exception Begin VARCHAR2(50); ON; VARCHAR2(50); exception := 'This is a test'; v_exception := 'This is a test'; dbms_output.put_line(v_exception); dbmsoutput.putline(exception); + Kết quả: + Kết quả: sm dỉĩlng đmnh danh PL/SQL: - Xét ví dụ: SET SERVEROUTPUT ON; DECLARE v varl VARCHAR2(20); v_var2 VARCHAR2(6); v_var3 NUMBER(5,3); BEGIN v varl := ‘string literal’; v_var2 := ’ 12.345’; v_var3 := 12.345; dbms_output.put_line('var v_varl); dbms_output.put_line('var v_var2); dbms_output.put_line('var v_var3); : '|| : ’|| : ’|| END; - Ket thu là: anonymous block ©B0 môn HTTT - Khoa CNTT - ĐH Khoa H0C T0 Nhiên SQL ND(n[,m]) Diễn giải Cho giá trị làm tròn n (đến cấp m, m=0) NC(n[,m]) (n) OR(n) ER(m,n) Cho giá trị n lấy m chữ số tính từ chấm thập phân b Cáclớn nhãn vàhoặc khôi lông nhau: Cho số nguyên nhở hon phụ thuộc vào đổi ntượng Khi kiếu liệu đối tượng Cho số nguyên lớn hoặckhông nhỏthế nphảithêm ■ Các có vào khối đểlàm cho khối lệnh thay đổi, nhãn bạn cần cập nhật lại PL/SQL Cho lũy thừa bậc n mdễ - Cú pháp: .%TYPE Cho giá trị eAn đọc hạn chế thành phần trùng tên khối lồng oTên Kiếu thuộc tính tham chiếu tới cột sở liệu Cho bậc n, n>=0 DE mu chumi khối phải đặt dòng khối lệnh thực thi (Begin Cho dấu n Khai báo khmi tl3o giá trH)hay banDeclare) đ0u chonhư cácsau: biẼln: T(n) (n) Set serveroutput on; khai báo có SIGN(n)= -1 trước tham Trong PL/SQL, biến phải n=0 SIGN(n)= chiếu có «find_stu_num» n>0 có SIGN(n)= Điều thực phần khai báo khối PL/SQL Nên BEGIN n) Cho giá trị tuyệt đổinhớ rằng, phần khai báo phải kết thúc dấu Các biến DBMS_OƯTPUT.PUT_LINE(‘the (m,n) Cho phần dư phép chia m cho n gán giá trị cách sử dụng toán tử Neu bạn khai báo m,n) Cho logarit số m nbiến hằng, giữ nguyên giá trị toàn khối PL/SQL procedure Đế làm việc này, bạn phải cung cấp cho giá trị phần Trả sin n n) Trả cosin n khai báo fìnd_stu_num has been excuted.’); n) Trả tan n o Ví dụ:ENDv_dongia NƯMBER := 1500; fínd_stu_num; SQL Diễn giải v counter NUMBER := 0; ■ Tên nhãn xuất tùy ý sau từ khóa END CAT(char l,char 2) Cho - kếtCác hợp chuỗi ký tự,liêntương biểu thức biếncủa của2PL/SQL kết vớitựnhau ■sử Các khối cótửthế lồng trongcác phần khối lệnhcách phần xử dụng toánbiếu 1thức toán tử Một dãy biến, phân vớihoặc n[...]... Phát Biĩhu Case Tìm KMm: Một phát biểu CASE tìm kiếm có các điều kiện tìm kiếm được đánh giá cho giá trị Boolean là TRUE, FALSE hoặc NULL Khi một điều kiện tìm kiếm được đánh giá là TRUE thì nhóm lệnh gắn với điều kiện đó được thực thi.Phát biếu này có cấu trúc như sau CASE SELECTOR WHEN Điều kiện tìm kiếm 1 Then Phát biểu 1; WHEN Điều kiện tìm kiếm 2 Then Phát biểu 2; WHEN Điều kiện tìm kiếm n Then... mon hoc tien quyet’ ELSE TOCHAR(prerequisite) END Một CASE EXPRESSĨON trả về giá trị đơn do đó nó thuộc về một kiểu dữ liệu đơn Vì vậy, có một điều quan trọng là bất kỳ phần nào của CASE EXPRESSION được thực thi, nó luôn trả về cùng kiểu dữ liệu Trong CASE EXPRESSION trước mệnh đề WHEN trả về kiểu dữ liệu VARCHAR2 Mệnh đề ELSE trả về giá trị của cột PREREQU1S1TE trong bảng COURSE Cột này được định nghĩa... của bộ lọc, do đó giá trị của Expression phải trả về cùng kiếu dữ liệu với bộ lọc Biếu thức ‘0’ chứa một số nên kiếu dữ liệu của nó cũng là số Trong đoạn mã lệnh thứ 2, một biểu thức tìm kiếm trả về kết quả TRUE hay FALSE giong như các điều kiện của phát biếu IF Ke tiếp, xem một ví dụ về phát biếu CASE gây ra một lỗi bởi vì kiếu dữ liệu do biểu thức trả về không cùng kiểu dữ liệu với bộ lọc Ví dụ: DECLARE... xác định mệnh đề WHEN nào được thực thi Mồi mệnh đề WHEN có một biểu thức (Expression) và một hay nhiều phát biếu có thế thực thi được gắn với nó Mệnh đề ELSE là tùy chọn và giống nhu’ mệnh đề ELSE trong cấu trúc IF THEN - ELSE END CASE xác định điểm kết thúc của phả biểu CASE Sơ đồ ©B0 môn HTTT - Khoa CNTT - ĐH Khoa H0C T0 Nhiên 26 Lưu ý là bộ lọc (SELECTOR) chỉ được tính một lần Các mệnh đề WHEN được... bằng nhau, hàm này trả về NULL Ngược lại nó trả về giá trị của biểu thức đầu tiên, hàm NULL IF có cấu trúc như sau: NULLIF (biểu thức 1, biểu thức 2) Nếu biểu thức 1 bằng biểu thứ 2 thì NULLIF trả về giá trị NULL Ngược lại, NULLIF trả về biểu thức 1 Lưu ý là hàm NULLIF ngược với hàm NVL Neu biểu ©B0 môn HTTT - Khoa CNTT - ĐH Khoa H0C T0 Nhiên 37 thức đầu tiên là NƯLL, NVL trả về biếu thức 2 Nếu biếu... l d 2 : v n u r n NƯMBER := &sv_user_num; new 2: vnurn NUMBER := 7; 7 la mot so le c Phân BMt Case và Case Tìm KiĩHm: Bạn đã thấy rằng phát biểu CASE tìm kiếm không có bộ lọc, ngoài ra các mệnh đề WHEN của nó chưa các điều kiện tìm kiếm mà kết quả trả về giá trị BOOLEAN giống như phát biếu IF Hãy xem đoạn mã lệnh mà bạn đã thấy trong ví dụ trước DECLARE vnurn NUMBER :=&svjuser_num; v_num_flag NUMBER;... ELSE Phát biểu n+1; ©B0 môn HTTT - Khoa CNTT - ĐH Khoa H0C T0 Nhiên 28 Khi điều kiện tìm kiếm được đánh giá là TRUE điều khiến được chuyến tới các thiết bị được gắn với nó Neu không có điều kiện tìm kiếm nào được đánh giá là TRUE, thì các phát biếu gắn với mệnh đề ELSE sẽ được thực thi Sơ đồ của cấu trúc phát biếu CASE tìm kiếm được minh họa bằng hình sau: Xem phiên bản của ví dụ trước đã được hiệu chỉnh:... các biếu thức và trả về giá trị của biểu thức không NULL đầu tiên Hàm COALESCE có cấu trúc nhu sau: COALESCE(expression 1, expression2, ,expressionN) Neu biếu thức 1 bằng NULL thì biếu thức 2 được tính Neu biếu thức 2 khônng bằng NƯLL thì hàm này trả về biểu thức 2 Neu biểu thức 2 cũng bằng NƯLL thì biểu thức kế tiếp được tính, nếu tất cả biểu thức đều bằng NULL thì hàm này trả về NULL Lưu ý là hàm... biếu CASE tìm kiếm, vì không có sự hiện diện của bộ lọc nên biến v n u r n được sử dụng cho các điều kiện tìm kiếm, vì thế không cần khai báo biến v_num_flag Ví dụ này cho cùng một kết quả đối cùng một giá trị ban nảy ta nhập vào biến v n u r n : Enter value for s v u s e r n u m : 7 o l d 2 : v n u r n NƯMBER := &sv_user_num; new 2: vnurn NUMBER := 7; 7 la mot so le c Phân BMt Case và Case Tìm KiĩHm:... đước gán cho biến vnurn trong lúc chạy chuông trình Ke tiếp giá trị này được chia cho 2 và số dư của nó được so sánh với 0 thông qua hàm NƯLLIF Neu số dư bằng 0 hàm NULLIF trả về NULL, ngược lại nó trả về số dư đó Giá trị được trả về bởi hàm NULLIF được lun trử trong biến vremainder và được thế hiên trên màn hình thông qua phát biểu DBMS OƯTPUT.PUT LINE Khi chạy ví dụ này cho ra kết quả như sau Đối với ... CASE SELECTOR lọc xác định mệnh đề WHEN thực thi Mồi mệnh đề WHEN có biểu thức (Expression) hay nhiều phát biếu thực thi gắn với Mệnh đề ELSE tùy chọn giống nhu’ mệnh đề ELSE cấu trúc IF THEN - ELSE... la mot so le Hoan b Phát Biĩhu Case Tìm KMm: Một phát biểu CASE tìm kiếm có điều kiện tìm kiếm đánh giá cho giá trị Boolean TRUE, FALSE NULL Khi điều kiện tìm kiếm đánh giá TRUE nhóm lệnh gắn... điều kiện tìm kiếm đánh giá TRUE điều khiến chuyến tới thiết bị gắn với Neu điều kiện tìm kiếm đánh giá TRUE, phát biếu gắn với mệnh đề ELSE thực thi Sơ đồ cấu trúc phát biếu CASE tìm kiếm minh