đích yêu cầuMôn Hệ quản trị CSDL là một môn học giúp sinh viên nắm được các kiến thứcvà các kỹ năng cơ bản để quản trị một CSDL quan hệ có phân quyền và bảo mật. Đồngthời, sinh viên có khả năng sử dụng ngôn ngữ lập trình để tương tác mạnh mẽ vớiCSDL thông qua việc thiết kế và sử dụng thủ tục, hàm và trigger. Đa số các hệ quản trịsử dụng phổ biến trên thị trường hiện nay đều hỗ trợ các tính năng trình bày trong giáotrình này. Để minh họa, phần mềm được chọn để thực hành là hệ quản trị CSDLOracle 10g R2. Sinh viên sẽ thực hành trong 6 buổi (30 tiết) ứng với 6 bài thực hànhvới các chủ đề khác nhau.
Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ MỤC LỤC TỔNG QUAN MÔN HỌC Phần lý thuyết Chương – Các biện pháp bảo vệ CSDL 8 1 Các biện pháp bảo vệ máy tính 8 2 Cấp quyền 9 2.1 Lệnh SQL để cấp quyền: 9 2.2 Lệnh SQL để thu hồi quyền: 10 3 Khung nhìn 10 3.1 Lệnh dùng để tạo view: 10 3.2 Lệnh dùng để xóa view 11 3.3 Thuận lợi bất lợi việc sử dụng view 11 4 Sao lưu phục hồi 12 5 Toàn vẹn liệu 12 6 Mật hoá liệu 13 7 RAID (Redundancy Array of Independent Disks) 14 8 Các khái niệm cấu trúc lưu trữ CSDL Oracle 16 8.1 Giới thiệu 16 8.2 Database Instance 16 8.3 Cấu trúc lưu trữ CSDL Oracle 17 8.4 Schema schema objects 23 8.5 Data dictionary 23 9 Mở/tắt CSDL thể (startup/shutdown) 23 9.1 Giới thiệu 23 9.2 Mở CSDL 24 9.3 Tắt CSDL 25 10 Oracle Net 25 11 Các biện pháp bảo vệ CSDL Oracle 26 11.1 Quản lý người dùng 26 11.2 Quản lý quyền 29 11.3 Quản lý Role (vai trò) 33 11.4 Import export 37 11.5 Oracle Data Pump 39 Chương Ngôn ngữ SQL & PL/SQL Oracle 41 1 Bảng liệu đối tượng liên quan 41 1.1 Quản lý bảng 41 1.2 Sequence 43 1.3 Index 44 1.4 Biểu thức quy (regular expression) 45 Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ 2 3 Các kiểu liệu Oracle 46 Cấu trúc chương trình PL/SQL 47 3.1 Cấu trúc lập trình Oracle 47 3.2 Các dạng chương trình PL/SQL 47 3.3 Cấu trúc khối PL/SQL vô danh 48 4 Các kiểu liệu PL/SQL 49 5 Thuộc tính 50 6 Kiểu liệu phức 50 6.1 Kiểu liệu người dùng định nghĩa 50 6.2 Kiểu TABLE 51 7 Các loại mệnh đề 51 7.1 Mệnh đề gán 51 7.2 Mệnh đề lệnh (SQL command) 52 8 Các cấu trúc điều khiển 52 8.1 Cấu trúc rẽ nhánh 52 8.2 Cấu trúc lặp 54 8.3 Cấu trúc Ngoại lệ (Exception) 55 9 Kiểu trỏ (Cursor) 57 9.1 Cú pháp khai báo trỏ: 57 9.2 Cú pháp mở trỏ: 58 9.3 Cú pháp lấy liệu 58 9.4 Cú pháp đóng trỏ 58 9.5 Một số thuộc tính trỏ: 59 9.6 Mệnh đề SELECT FOR UPDATE Cursor 59 9.7 Mệnh đề WHERE CURRENT OF Cursor 59 10 Thủ tục, hàm trigger 60 10.1 Thủ tục 61 10.2 Hàm 62 10.3 Trigger 63 Chương Quản lý giao dịch & phục hồi 67 1 Giao dịch (transaction) 67 1.1 Định nghĩa Giao dịch: 67 1.2 Trạng thái Giao dịch: 68 1.3 Các thuộc tính GD 68 2 Điều khiển cạnh tranh (Concurrency control) 70 2.1 Sự cần thiết phải có quản lý cạnh tranh 70 2.2 Lịch trình (schedule): 72 2.3 Tính khả lịch trình 75 2.4 Tính khả phục hồi lịch trình 75 2.5 Các kỹ thuật quản lý cạnh tranh 76 2.6 Các kỹ thuật lạc quan (optimistic techniques) 84 2.7 Độ mịn mục liệu (data granularity) 85 3 Phục hồi CSDL 88 Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ 3.1 Sự cần thiết phải phục hồi liệu 88 3.2 Các GD phục hồi 88 3.3 Các tiện ích để phục hồi 89 4 Quản lý giao dịch Oracle: 93 4.1 Tổng quan 93 5 Sao lưu, phục hồi Oracle: 97 5.1 Sao lưu 98 5.2 Phục hồi (recovery) 102 Phần thực hành BÀI LÀM QUEN VỚI ORACLE 105 1 Nội dung 105 2 Bài tập có hướng dẫn 105 3 Bài tập tự làm 115 BÀI QUẢN LÝ BẢNG DỮ LIỆU 116 1 Nội dung 116 2 Bài tập có hướng dẫn 116 3 Bài tập tự làm 118 BÀI LẬP TRÌNH PL/SQL 120 1 Nội dung 120 2 Bài tập có hướng dẫn 120 3 Bài tập tự làm 125 BÀI HÀM – THỦ TỤC 127 1 Nội dung 127 2 Bài tập có hướng dẫn 127 3 Bài tập tự làm 128 BÀI TRIGGER 130 1 Nội dung 130 2 Bài tập có hướng dẫn 130 3 Bài tập tự làm 132 BÀI QUẢN LÝ GIAO DỊCH, SAO LƯU VÀ PHỤC HỒI 133 1 Nội dung 133 2 Bài tập có hướng dẫn 133 3 Bài tập tự làm 135 ÔN TẬP 136 1 Nội dung 136 2 Bài tập 136 Phụ lục 139 1 Các lỗi thường gặp 139 2 Các hàm xử lý liệu 140 Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ DANH MỤC HÌNH Hình Các mức RAID 15 Hình Database Instance 17 Hình Mối quan hệ Data block, extend Segment 20 Hình Mối tương quan Tablespace Datafiles 21 Hình Quan hệ cấu trúc luận lý vật lý CSDL 21 Hình Cấp phát thêm vùng lưu trữ cho CSDL 22 Hình Quy trình mở/tắt CSDL Oracle 24 Hình Role database 34 Hình Cấu trúc khối PL/SQL 47 Hình 10 Hai dạng khối chương trình PL/SQL 48 Hình 11 Vị trí lưu trữ chương trình schema 61 Hình 12 Các kiện Trigger 64 Hình 13 Tổ chức lưu trữ trình thực giao dịch cập nhật CSDL 67 Hình 14 Biểu đồ trạng thái tương ứng với GD 68 Hình 15 Các thành phần liên quan việc quản lý GD HQTCSDL 70 Hình 16 Các lịch trình 72 Hình 17 Đồ chờ có chu trình 82 Hình 18 Sự phân cấp độ mịn 87 Hình 19 Sự cố xảy GD thực cạnh tranh 89 Hình 20 Các lựa chọn lưu toàn CSDL 99 Hình 21 Một chiến lược lưu tăng dần chênh lệch 101 Hình 22 Một chiến lược lưu tăng dần tích lũy 101 Hình 23 Nguyên lý lưu, hoàn lại phục hồi CSDL 103 Hình 24 Oracle Net Manager 105 Hình 25 Đặt Net Service Name 106 Hình 26 Chọn giao thức mạng sử dụng 106 Hình 27 Các thiết lập giao thức 106 Hình 28 Thiết lập tên service 107 Hình 29 Kiểm tra kết nối 107 Hình 30 Thông báo kết nối thành công 107 Hình 31 Giao diện SQL Developer 108 Hình 32 Kết nối trực tiếp 108 Hình 33 Kết nối thông qua Oracle Net 109 Hình 34 Cửa sổ Oracle SQL Developer 109 Hình 35 Lỗi đăng nhập chưa có quyền kết nối đến CSDL 110 Hình 36 Dùng biến 120 Hình 37 Cửa sổ nhập liệu 120 Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ DANH MỤC BẢNG Bảng Một số quyền hệ thống thông dụng 30 Bảng Một số quyền đối tượng thông dụng 32 Bảng Các roles định nghĩa sẵn 36 Bảng Thông tin roles 37 Bảng Các tham số lệnh imp exp 38 Bảng Các tham số tương đương imp/exp Oracle Data Pump 40 Bảng Các mẫu biểu thức quy 45 Bảng Các kiểu liệu Oracle 47 Bảng Các ngoại lệ thường xảy 57 Bảng 10 Diễn giải thuộc tính trỏ 59 Bảng 11 Lịch trình cạnh tranh 71 Bảng 12 Lịch trình gây liệu cập nhật 73 Bảng 13 Lịch trình phụ thuộc vào GD không hoàn tất 74 Bảng 14 Lịch trình phân tích không quán 74 Bảng 15 Lịch trình không khả phục hồi 75 Bảng 16 Giao thức 2PL giải vấn đề liệu cập nhật 79 Bảng 17 Giao thức 2PL giải vấn đề phụ thuộc vào GD không hoàn tất 79 Bảng 18 Giao thức 2PL giải vấn đề phân tích không quán 80 Bảng 19 Lịch trình cuộn nhiều tầng (cascade rollback) 80 Bảng 20 Tình trạng khóa chết 81 Bảng 21 Sự tương thích khóa chế khóa đa hạt 87 Bảng 22 Một đoạn tập tin nhật ký 90 Bảng 23 Các mức cô lập tượng đọc 94 Bảng 24 Bảng tương thích khoá 96 Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ TỔNG QUAN MÔN HỌC Mục đích yêu cầu Môn Hệ quản trị CSDL môn học giúp sinh viên nắm kiến thức kỹ để quản trị CSDL quan hệ có phân quyền bảo mật Đồng thời, sinh viên có khả sử dụng ngôn ngữ lập trình để tương tác mạnh mẽ với CSDL thông qua việc thiết kế sử dụng thủ tục, hàm trigger Đa số hệ quản trị sử dụng phổ biến thị trường hỗ trợ tính trình bày giáo trình Để minh họa, phần mềm chọn để thực hành hệ quản trị CSDL Oracle 10g R2 Sinh viên thực hành buổi (30 tiết) ứng với thực hành với chủ đề khác Sau hoàn tất học phần này, sinh viên có thể: Kết nối, quản lý CSDL (tạo/xóa/khởi động/tắt CSDL) Quản lý cấp quyền cho người dùng chép CSDL Thực thao tác CSDL (tạo bảng, cài đặt ràng buộc bảng; thêm, sửa, xóa liệu) Lập trình tạo hàm, thủ tục, trigger với ngôn ngữ PL/SQL Hiểu điều khiển cạnh tranh giao dịch Quản lý lưu, phục hồi Hiểu cài đặt biện pháp bảo vệ hệ thống CSDL Nội dung cốt lõi Tài liệu gồm chương lý thuyết thực hành Mỗi thực hành tập trung vào số nội dung với tập có hướng dẫn tập tự làm Kiến thức tiên Như môn bắt buộc, môn học đưa vào giảng dạy cho sinh viên chuyên ngành Công Nghệ Thông Tin với yêu cầu sinh viên hoàn thành học phần Hệ Cơ Sở Dữ Liệu (CT106) Phương pháp học tập Với mục tiêu nâng cao khả tự học tập tự nghiên cứu sinh viên, người soạn cố gắng lồng ghép vào nội dung ví dụ minh họa đơn giản, cụ thể; đồng thời bố trí bố cục với mong muốn tạo dễ hiểu cho sinh viên người đọc Để học tốt môn học này, trước hết sinh viên cần phải: Tham gia đầy đủ buổi học lý thuyết lớp buổi thực hành phòng máy Trước buổi thực hành, SV tự nghiên cứu làm phần tập có hướng dẫn nhà Trong buổi thực hành, sinh viên thực phần tập hướng dẫn Sinh viên cần lưu lại tất câu lệnh làm để sử dụng cho sau Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ Thời lượng bố trí cho chương, Chương I: Các biện pháp bảo vệ CSDL 6t – buổi LT Chương II: Ngôn ngữ SQL & PL/SQL 3t – buổi LT Chương III: Quản lý giao dịch, lưu phục hồi 6t – buổi LT Phần thực hành: Bài 1: Làm quen với Oracle, quản lý người dùng, 5t – buổi TH import/export Bài 2: DDL & DML 5t – buổi TH Bài 3: Ngôn ngữ PL/SQL 5t – buổi TH Bài 4: Hàm, thủ tục 5t – buổi TH Bài 5: Trigger 5t – buổi TH Bài 6: Quản lý giao dịch & lưu, phục hồi CSDL 5t – buổi TH Một số quy ước Để tạo dễ dàng việc theo dõi giáo trình, phần quan trọng viết theo định dạng khác quy ước sau: Phần quan trọng CODE Các ký hiệu trình bày cú pháp câu lệnh có ý nghĩa sau: CHỮ HOA từ khóa chữ thường từ người dùng định nghĩa, cần thay viết lệnh cụ thể {A | B} mục bắt buộc phải có, chọn A B [A] mục A không bắt buộc A mục A xuất nhiều lần ::= thay Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ Chương – Các biện pháp bảo vệ CSDL Trong chương từ mục đến mục lý thuyết tổng quát biện pháp bảo vệ CSDL máy tính Tùy theo HQTCSDL mà mức độ cách thức cài đặt biện pháp khác Từ mục chương trở sau sử dụng HQTCSDL Oracle để minh họa biện pháp cụ thể Các biện pháp bảo vệ máy tính An toàn CSDL (DB security) bảo vệ CSDL khỏi đe dọa có chủ ý hay vô tình thông qua biện pháp có sử dụng máy tính sử dụng máy tính Việc xem xét an toàn không áp dụng cho liệu CSDL, mà bao gồm phần cứng, phần mềm người Chúng ta xem xét an toàn CSDL tình sau: • CSDL bị đánh cắp hay gian lận • CSDL tính bảo mật • CSDL tính riêng tư • CSDL tính toàn vẹn • CSDL tính sẵn sàng Nguy (threat) tình hay kiện, cố ý hay vô tình, ảnh hưởng bất lợi đến hệ thống ảnh hưởng đến tổ chức Nguy hữu mát phần cứng, phần mềm, liệu, hay vô tín nhiệm khách hàng Mỗi nguy phải xem vi phạm an ninh xảy Tổ chức phải nhận định tất nguy tiềm ẩn, hay nguy quan trọng, để từ đưa kế hoạch phòng tránh biện pháp đối phó phù hợp Khi xây dựng biện pháp cần lưu ý chi phí thực mức độ cản trở người dùng Có nhiều biện pháp bảo vệ hệ thống khác chia thành loại biện pháp không sử dụng máy tính biện pháp có sử dụng máy tính Các biện pháp không sử dụng máy tính bao gồm bố trí thiết bị cách an toàn, quản trị nhân sự, sách an ninh kế hoạch đối phó với bất ngờ,… Trong khuôn khổ giáo trình này, ta quan tâm biện pháp bảo vệ có sử dụng máy tính Các biện pháp bảo vệ máy tính đề cập giáo trình bao gồm: • Cấp quyền (authorization) • Khung nhìn (Views) • Sao lưu phục hồi (Backup and restore) • Toàn vẹn liệu (Integrity) • Mật hóa (Encryption) • Công nghệ RAID Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ Cấp quyền Cấp quyền gán quyền cho người dùng hay chương trình để truy cập vào hệ thống hay đối tượng hệ thống Chứng thực người dùng (authentication) chế để xác định người dùng Cơ chế chứng thực người dùng phổ biến sử dụng định danh người dùng với mật khẩu, cách đảm bảo cách hoàn toàn Vì vậy, cần phải có thủ tục kèm để nâng cao tính an toàn cho hệ thống như: Mật phải giữ kín thay đổi định kỳ Định danh mật lưu hệ thống phải dạng mã hóa Đưa qui định thành phần mật Đề thủ tục cần thiết theo dõi sát việc cấp quyền cho người dùng Một số HQTCSDL sử dụng định danh người dùng riêng, số sử dụng định danh người dùng hệ điều hành bên hỗ trợ hai Chủ sở hữu (ownership) đối tượng CSDL người tạo đối tượng Các đối tượng có sẵn HQTCSDL thuộc thân HQTCSDL mà đại diện nhà quản trị CSDL (DBA) Chủ sở hữu có quyền (privileges) đối tượng gán quyền đối tượng cho người khác HQTCSDL ghi nhận tất quyền gán cho người dùng gán ai; để trì đắn tập quyền người dùng quyền gỡ bỏ Các HQTCSDL hỗ trợ nhiều mức cấp quyền khác (mức người dùng user nhóm người dùng - role) Định danh người dùng thường có độ ưu tiên cao định danh nhóm Mỗi người dùng tạo gán loại quyền: Quyền đối tượng (Object Privileges) Các quyền cho phép người dùng thực thao tác đối tượng CSDL; chẳng hạn quyền SELECT, INSERT, UPDATE, liệu bảng Quyền hệ thống (System Privileges): Các quyền cho phép người dùng thực thao tác CSDL không gắn với đối tượng tồn nào; chẳng hạn quyền tạo bảng, tạo view, 2.1 Lệnh SQL để cấp quyền: Các quyền định nghĩa chuẩn ISO: SELECT, INSERT, UPDATE, DELETE, REFERENCES, USAGE Gán quyền đối tượng cho người dùng lệnh: GRANT {danh_sách_quyền | ALL PRIVILEGES} ON tên_đối tượng TO {danh_sách_định_danh_được_cấp | PUBLIC} [WITH GRANT OPTION] Tùy chọn WITH GRANT OPTION cho phép người dùng cấp tiếp tục cấp quyền cho người khác Lệnh gán quyền hệ thống thông thường Hệ QTCSDL cài đặt tương tự bỏ mệnh đề ON Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ 2.2 Lệnh SQL để thu hồi quyền: Lệnh REVOKE dùng để gỡ bỏ quyền đối tượng khỏi người dùng cấp: REVOKE [GRANT OPTION FOR] {ds_quyền| ALL PRIVILEGES} ON đối_tượng FROM {danh_sách_định_danh_được_cấp | PUBLIC} [RESTRICT | CASCADE] RESTRICT: mặc định, ngưng thực thi lệnh Revoke kết câu lệnh làm ảnh hưởng đến đối tượng phụ thuộc CASCADE: Các đối tượng phụ thuộc bị xóa gỡ Lệnh thu hồi quyền hệ thống thông thường Hệ QTCSDL cài đặt tương tự bỏ mệnh đề ON Khung nhìn Khung nhìn kết động nhiều thao tác quan hệ quan hệ sở (base table) để sinh quan hệ khác Một khung nhìn bảng ảo (virtual table), không thực tồn CSDL Một người dùng gán quyền thích hợp khung nhìn định nghĩa nhiều bảng Bằng cách ta đảm bảo tính an toàn cho liệu tốt gán quyền nhiều bảng sở 3.1 Lệnh dùng để tạo view: CREATE VIEW tên_view [(tên_cột [, ])] AS câu_truy_vấn [WITH [CASCADED | LOCAL] CHECK OPTION] Các dòng vào khỏi view gọi dòng di cư (migrating rows) WITH CHECK OPTION tùy chọn để đảm bảo dòng không di cư khỏi view qua thao tác insert update view (nghĩa là, dòng không thỏa điều kiện WHERE câu truy vấn view dòng không cập nhật vào bảng sở) Nếu chọn CASCADE việc đảm bảo áp dụng view định nghĩa view (đây chế độ mặc định) Nếu chọn LOCAL việc đảm bảo áp dụng view định nghĩa view trừ dòng di cư khỏi view hay table view Ví dụ minh họa sau cho thấy lệnh UPDATE không thực thi làm cho dòng muốn cập nhật có sno = SG37 di cư khỏi view high_salary Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 10 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ result := get_dept_salary(30); dbms_output.put_line(result); END; Câu 3: Sử dụng bảng hr.Jobs(Job_id, Job_Title, Min_Salary, Max_Salary): Tạo thủ tục MucLuong nhận vào Job_id, trả lương thấp cao ứng với mã công việc Thử gọi thủ tục với giá trị: IT_PROG, SA_MAN Create or replace procedure MucLuong (p_jobid jobs.job_id%TYPE, min_lg OUT jobs.min_salary%type, max_lg OUT jobs.max_salary%type) IS begin select min_salary, max_salary into min_lg, max_lg from jobs where JOB_ID = p_jobid; exception when no_data_found then dbms_output.put_line (‘Ma cong viec ' || p_jobid || ‘ khong tim thay’); when others then dbms_output.put_line ('Khong biet loi gi'); end; Thử gọi thủ tục: set serveroutput on; declare min1 jobs.min_salary%type; max1 jobs.max_salary%type; begin MucLuong(‘&Nhap_ma_cong_viec’,min1, max1); dbms_output.put_line ('Min = '|| to_char(min1) || ' Max = ' || to_char(max1)); end; Bài tập tự làm Câu 1: thực yêu cầu sau Tạo thủ tục TenThang nhận vào ngày tháng, in hình tên tháng theo tiếng Việt Thử gọi thủ tục với ngày người dùng nhập vào Tạo hàm LayTen nhận vào họ tên người Hàm trả tên người Câu 2: Quan sát cấu trúc liệu bảng có schema SCOTT dùng PL/SQL để thực yêu cầu sau: Các nhân viên làm việc không tốt bị trừ tiền thưởng Viết thủ tục để giảm tiền thưởng cho nhân viên Với mã nhân viên phần trăm giảm truyền vào từ tham số Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 128 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ Viết hàm để lấy mã số nhân viên có tiền lương cao Viết thủ tục nhận vào mã nhân viên, in họ tên tất nhân viên quản lý trực tiếp gián tiếp nhân viên Câu 3: Quan sát cấu trúc liệu bảng có schema HR (Human Resource – quản lý nhân sự) dùng PL/SQL để thực yêu cầu sau: Viết lệnh truy vấn bảng hr.employees để lấy cột mã nhân viên họ tên nhân viên có độ dài họ tên nhiều 15 kí tự Sử dụng bảng hr.employees hr.jobs: Tạo hàm LuongHopLy nhận vào mã nhân viên, lương mới, sử dụng thủ tục MucLuong tạo câu phần để kiểm tra xem lương người có nằm khoảng lương ứng với công việc người không Nếu có, trả True, ngược lại trả False (kiểu BOOLEAN) Thử với giá trị (105, 7000), (206, 10000) Sử dụng bảng Dept: Tạo thủ tục ThemPhongBan nhận vào tên phòng, vị trí phòng để xen vào bảng DEPT với cột: Deptno: Chương trình tự tìm số lớn có + 10 Dname: Tên phòng nhận vào Loc: vị trí nhận vào Thử gọi thủ tục với giá trị đầu vào người dùng nhập Câu 4: Quan sát cấu trúc liệu bảng có schema csdl5 (sinh viên tự thực import) dùng PL/SQL để thực yêu cầu sau: Viết thủ tục GoiTen nhận vào tham số mã giáo viên Hãy in tên giáo viên với danh xưng 'Thầy' giáo viên nam, 'Cô' giáo viên nữ Viết hàm TongGioChuan nhận vào tham số mã giáo viên, hàm trả tổng số tiết chuẩn mà giáo viên giảng dạy Biết rằng: Số tiết qui chuẩn = SOTIET * HESO; HESO sỉ số lớp thuộc [0 80], 1.2 sĩ số lớp thuộc (80 120], 1.4 sĩ số lớp thuộc (120 150], 1.5 sĩ số lớp từ 150 trở lên Viết hàm TamUngCN trả họ tên giáo viên có tạm ứng nhiều từ trước đến Viết hàm NgayTamUngGanNhat trả ngày có giáo viên tạm ứng gần Sử dụng hàm TongGioChuan tạo câu 2, viết thủ tục TongGioTheoCDanh nhận vào tham số tên chức danh, thủ tục in họ tên GV với tổng số qui chuẩn giáo viên thuộc chức danh Viết thủ tục TgTamUngTrongTG nhận vào mốc thời gian (từ ngày, đến ngày), thủ tục in danh sách gồm họ tên, tổng số tiền tạm ứng GV khoảng thời gian cho Sử dụng hàm TongGioChuan tạo câu 2, viết thủ tục TienGD nhận vào mã giáo viên, trả tổng chuẩn, số vượt số tiền giảng dạy GV Sử dụng thủ tục TienGD vừa tạo câu 7, viết thủ tục InBangLuong hiển thị danh sách gồm họ tên, tổng chuẩn dạy, số vượt, số tiền giảng dạy GV Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 129 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ BÀI TRIGGER Nội dung Tạo sử dụng Trigger Bài tập có hướng dẫn Câu 1: Giả sử bảng DEPT lược đồ Scott có thêm cột BUDGET chứa ngân sách tối đa phòng ban dành cho việc trả lương Xây dựng trigger để kiểm tra cập nhật tiền lương tổng lương tất nhân viên phòng ban không vượt ngân sách Thêm cột Budget kiểu number(10) vào bảng DEPT Tìm tổng tiền lương tất nhân viên theo phòng ban để ước lượng giá trị phải nhập cho cột Budget SELECT deptno, Sum(Sal) As Total_Sal Group By deptno; FROM scott.emp Nhập vào giá trị cho cột Budget lớn Total_Sal chút Tạo trigger cột : lương mã phòng bảng Emp CREATE OR REPLACE TRIGGER check_budget_EMP AFTER INSERT OR UPDATE OF SAL, DEPTNO ON Scott.EMP DECLARE Khai báo cursor chứa mã phòng ngân sách từ bảng DeptT CURSOR DEPT_CUR IS SELECT DEPTNO, BUDGET FROM Scott.DEPT; Khai báo biến để lưu mã phòng(DNO), Tổng lương từ ngân sách(ALLSAL), tổng lương từ nhân viên (DEPT_SAL) DNO Scott.DEPT.DEPTNO%TYPE; ALLSAL Scott.DEPT.BUDGET%TYPE; DEPT_SAL NUMBER; BEGIN OPEN DEPT_CUR; LOOP lấy ngân sách phòng FETCH DEPT_CUR INTO DNO, ALLSAL; EXIT WHEN DEPT_CUR%NOTFOUND; Tính tổng lương nhân viên phòng SELECT sum(SAL) INTO DEPT_SAL FROM scott.EMP WHERE DEPTNO = DNO; Nếu Tổng lương > Ngân sách báo lỗi IF DEPT_SAL > ALLSAL then raise_application_error(-20325, 'Tong luong phong ' || to_char(DNO) || ' da vuot qua ngan sach'); END IF ; END LOOP; Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 130 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ CLOSE DEPT_CUR; END; Câu 2: Giả sử để theo dõi việc chỉnh sửa liệu nhạy cảm (liên quan đến tiền bạc chẳng hạn) người dùng Người ta mong muốn với thông tin sửa đổi phải ghi nhận lại: Ai sửa, thời gian nào, giá trị cũ gì, giá trị Chúng ta xây dựng trigger để giải vấn đề Thực bảng Emp người dùng sửa lương thông tin phải lưu lại Tạo bảng để lưu thông tin sau : CREATE TABLE Change_Sal_EMP( UserName VARCHAR2(20), MODIFY_TIME DATE, EMPNO NUMBER(4), Old_Sal NUMBER(7), New_Sal NUMBER(7) ) Tạo Trigger CREATE OR REPLACE TRIGGER store_change_sal_EMP AFTER UPDATE OF SAL on scott.EMP FOR EACH ROW BEGIN User hàm có sẵn hệ thống cho biết kết nối CSDL INSERT INTO Change_Sal_EMP(UserName, MODIFY_TIME, EMPNO, Old_Sal, New_Sal) VALUES (User, Sysdate, :new.Empno, :old.sal, :new.sal); END; Hãy thử cập nhật lương nhân viên xem, sau mở bảng Change_Sal_EMP quan sát kết Chú ý : Trong lúc cập nhật liệu không thỏa trigger tạo ví dụ trước nên việc cập nhật không thực Hãy xóa trigger mà bạn tạo phần trước bảng Emp Câu 3: Trong schema baohiem (đã tạo 2), tạo trigger có chức ngăn không cho thêm thẻ BH khách hàng mua bảo hiểm loại thẻ mua hiệu lực create trigger Da_co_BH before insert on thebh for each row declare sodong int; begin select count(*) into sodong from thebh where makh = :new.makh and maloai = :new.maloai and ngaykt0 then raise_application_error(-20111, 'KH hien van duoc BH loai nay'); Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 131 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ end if; end; Thử xem trigger có hiệu lực chưa: insert into thebh (maloai, ngaybd, makh, thoihan, ngaykt, conhl) values('YT', sysdate, '006', 6, add_months(sysdate,6), 1); insert into thebh (maloai, ngaybd, makh, thoihan, ngaykt, conhl) values('YT', sysdate+1, '006', 6, add_months(sysdate+1,6), 1); Câu 4: Trong schema baohiem tạo 2, tạo trigger để chèn liệu vào bảng MUCPHI người dùng cập nhật mức phí thêm loại bảo hiểm với phí create or replace trigger CN_Phi after insert or update on LoaiBH for each row declare begin insert into mucphi values (maloai, mucphi, ngaybd, nguoicn) (:new.maloai, :new.mucphi, sysdate, user); end; Thử cập nhật mức phí loại bảo hiểm: update loaibh set mucphi=8 where maloai='TS'; Bài tập tự làm Câu 1: Tạo trigger tương tự câu để theo dõi việc xóa liệu bảng Emp Câu 2: Trong schema csdl5, viết trigger theo dõi việc xen liệu vào bảng TAMUNG với quy định: giáo viên tạm ứng tối đa lần tối đa 3000000 đồng tháng Câu 3: Trong schema banhang tạo 2, tạo trigger để chèn liệu vào bảng GIABAN người dùng cập nhật đơn giá thêm mặt hàng với giá vào bảng HangHoa Câu 4: Trong schema banhang, tạo trigger để cập nhật giá trị cho cột TongTriGia HoaDon người dùng cập nhật SoLuong DonGiaBan, thêm dòng vào bảng ChiTietHD Câu 5: Trong schema banhang, tạo trigger để kiểm tra việc cập nhật đơn giá mặt hàng: giá không cao giá cũ 10% Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 132 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ BÀI QUẢN LÝ GIAO DỊCH, SAO LƯU VÀ PHỤC HỒI Nội dung Các khái niệm lưu phục hồi Oracle Các chiến thuật lưu phục hồi CSDL Sử dụng RMAN (Recovery MANager) để lưu phục hồi CSDL Bài tập có hướng dẫn Trong tập sau, tìm hiểu phương pháp lưu phục hồi luận lý vật lý Câu 1: thử nghiệm lưu phục hồi vật lý với RMAN Bước 1: đăng nhập RMAN, vào Terminal, gõ vào lệnh: rman target sys Khi đăng nhập thành công, hình dòng RMAN> Bước 2: backup toàn CSDL (chú ý: lúc CSDL chế độ ARCHIVELOG) RMAN> backup database; Quan sát ghi nhận thông số kết Hãy tìm đến thư mục chứa tập tin backup Bước 3: giả lập CSDL bị lỗi, xóa người dùng SCOTT Đăng nhập SQLPlus, ghi nhận thời gian gõ vào SQL> drop user scott; Bước 4: phục hồi CSDL, đăng nhập RMAN thực lệnh sau RMAN> shutdown immediate; RMAN> startup mount; RMAN> restore database; RMAN> recover database until time ‘’)”; RMAN> alter database open resetlogs; “to_date(‘’, Trong đó, thời điểm ghi nhận trước xóa SCOTT, ví dụ “to_date(‘27/08/2009 13:00:00’, ‘DD/MM/YYYY HH24:MI:SS’)”; Kiểm tra lại liệu sau phục hồi Câu 2: thử nghiệm câu lệnh COMMIT ROLLBACK cửa sổ SQLPlus Đăng nhập vào lược đồ người dùng thực thi câu lệnh sau để tạo bảng: CREATE TABLE test (id NUMBER(4) PRIMARY KEY, notes VARCHAR(50), count NUMBER(4), created DATE); Thực lệnh SQL sau INSERT INTO test(id, notes) VALUES(1, 'Test 1'); Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 133 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ INSERT INTO test(id, notes) VALUES(2, 'Test 2'); COMMIT; Quan sát thay đổi liệu bảng Test: SELECT * FROM test; Thực tiếp câu lệnh sau: INSERT INTO test(id, notes) VALUES(3, 'Test rollback'); Quan sát kết quả: SELECT * FROM test; Thực cuộn lại: ROLLBACK; Quan sát kết quả: SELECT * FROM test; Câu 3: Thử nghiệm trường hợp Oracle kết thúc giao dịch không tường minh Trường hợp 1: giao dịch kết thúc thực thành công lệnh DDL, thực lệnh sau: INSERT INTO test(id, notes) VALUES(4, 'Test 4'); INSERT INTO test(id, notes) VALUES(5, 'Test 5'); CREATE TABLE test_cloned (id NUMBER(4) PRIMARY KEY, notes VARCHAR(50), count NUMBER(4), created DATE); ROLLBACK; Sinh viên quan sát liệu bảng Test cho nhận xét Trường hợp 2: giao dịch kết thúc phiên làm việc người dùng kết thúc, thực lệnh sau: INSERT INTO test(id, notes) VALUES(4, 'Test 4'); INSERT INTO test(id, notes) VALUES(5, 'Test 5'); Sinh viên tắt kết nối người dùng đăng nhập lại sau đó, thực lệnh SELECT để xem kết bảng Test Câu 4: Thử nghiệm giao dịch với mức cô lập READ ONLY Thực lệnh SQL sau: SET TRANSACTION READ ONLY; INSERT INTO test(id, notes) VALUES(6, 'Test 6'); – Quan sát kết Sinh viên giữ nguyên phiên làm việc tại, đăng nhập vào lược đồ người dùng khác thực lệnh sau (chú ý: người dùng phải có toàn quyền bảng Test) DELETE FROM TEST WHERE id = 5; Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 134 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ COMMIT; Quay lại phiên làm việc người dùng trước thực lệnh sau: SELECT * FROM test; Quan sát kết COMMIT; SELECT * FROM test; Quan sát kết Câu 5: Thử nghiệm với khoá Oracle Sinh viên mở hai phiên làm việc song song (đăng nhập người dùng khác nhau) thực lệnh sau (theo thứ tự từ xuống theo bảng): Phiên làm việc Phiên làm việc SET TRANSACTION ISOLATION LEVEL READ COMMITTED; UPDATE Test SET count = WHERE id = 1; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; UPDATE Test SET count = WHERE id = 1; (Sinh viên quan sát kết cho nhận xét) COMMIT; SELECT * FROM Test; (Sinh viên quan sát kết cho nhận xét) ( Sinh viên quan sát kết cho nhận xét) SELECT * FROM Test; COMMIT; ( Sinh viên quan sát kết cho nhận xét) Câu 6: Thử nghiệm với deadlock Sinh viên mở hai phiên làm việc song song (đăng nhập người dùng khác nhau) thực lệnh sau (theo thứ tự từ xuống theo bảng): Phiên làm việc Phiên làm việc UPDATE Test SET count = WHERE id = 1; UPDATE Test SET count = WHERE id = 2; UPDATE Test SET count = WHERE id = 1; UPDATE Test SET count = WHERE id = 2; (Sinh viên quan sát kết cho nhận xét) (Sinh viên quan sát kết cho nhận xét) Bài tập tự làm Câu 1: thực lệnh imp/exp impdp/expdp Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 135 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ Thực export liệu từ uimp1, uimp2 uimp3 tài khoản người dùng tương ứng Tạo người dùng importer với quyền đăng nhập tạo bảng, thực import liệu tập tin dump vừa tạo schema Câu 2: thực lưu phục hồi CSDL chế độ NOARCHIVELOG Dựa mô tả lưu tăng dần (incremental backup) trang 40 41 Thử nghiệm lưu phục hồi giải thuật: sai khác (differential) tích lũy (cumulative) Chú ý: trước lần lưu, cần thay đổi vài liệu đối tượng để đối chiếu kết phục hồi Khuyến khích sinh viên tìm hiểu thông tin cần thiết công cụ tìm kiếm Internet để giải tập Câu 3: Sinh viên thực lệnh cần thiết để kiểm chứng tính xác bảng tương thích khoá phần lý thuyết ÔN TẬP Nội dung Trong ôn tập này, tất kiến thức sinh viên tìm hiểu trước áp dụng vào CSDL cụ thể Qua đó, sinh viên ôn lại kiến thức sau: Các lệnh DDL liên quan đến bảng liệu, index, sequence… Lệnh truy vấn SQL Tạo hàm, thủ tục trigger với ngôn ngữ PL/SQL Quản lý người dùng, phân quyền nhóm Quản trị lưu phục hồi CSDL Bài tập CSDL Northwind có cấu trúc sau: LoaiHang(MaLH, TenLH, MoTa) Chứa thông tin mã loại hàng, tên mô tả chi tiết danh mục loại hàng KhachHang(MaKH, TenCongTy, TenNguoiLH, DanhNghiaLH, DiaChi, ThanhPho, Vung, MaBuuDien, QuocGia, SoDT, Fax) Lưu trữ thông tin chi tiết khách hàng gồm mã khách hàng (công ty), tên công ty, tên người liên hệ, danh nghĩa liên hệ, địa chỉ, thành phố, vùng, mã bưu điện, nước, số điện thoại, số fax NhanVien(MaNV, TenNV, HoNV, ChucVu, ChucDanhLS, NgaySinh, NgayVaoLam, DiaChi, ThanhPho, Vung, MaBuuDien, QuocGia, DTNha, SoNhanh, GhiChu) Lưu trữ thông tin chi tiết nhân viên gồm mã nhân viên, họ, tên, chức vụ, chức danh lịch sự, ngày sinh, ngày vào làm, địa chỉ, thành phố, vùng, mã bưu điện, nước, điện thoại nhà, số điện thoại nhánh, ghi ChiTietDatHang(MaDonDH, MaHang, DonGia, SoLuong, GiamGia) Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 136 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ Thông tin chi tiết đặt hàng gồm mã đơn đặt hàng, mã sản phẩm, đơn giá, số lượng, giảm giá DonDatHang (MaDonDH, MaKH, MaNV, NgayDatHang, NgayPhaiGiao, NgayGoiHang, MaCTyVC, GiaVC, TenNguoiNhan, DCDen, TPDen, VungDen, MaBDDen, QuocGiaDen) Bảng lưu trữ thông tin Hóa đơn mã hóa đơn, mã khách hàng đặt, mã nhân viên tiếp nhận, ngày đặt hàng, ngày phải giao, ngày gởi hàng, mã công ty vận chuyển, giá vận chuyển, tên người nhận, địa đến, thành phố đến, vùng đến, mã bưu điện đến, quốc gia đến HangHoa(MaHang, TenHang, MaCtyCC, MaLH, SLTrenDV, DonGia, TonKho, HetSanXuat) Bảng lưu thông tin chi tiết sản phẩm gồm: Mã sản phẩm, tên sản phẩm, mã công ty cung cấp, mã loại hàng, số lượng hàng đơn vị, đơn giá, số lượng tồn kho tình trạng sản xuất (0) hay không (-1) Vung(MaVung, GiaiThich) Bảng lưu trữ thông tin vùng, miền CongTyVanChuyen(MaCTyVC, TenCTyVC, DienThoai) Bảng lưu trữ thông tin công ty giao hàng CongTyCungCap(MaCTyCC, TenCTyCC, TenNguoiLH, DanhNghiaLH, DiaChi, ThanhPho, Vung, MaBuuDien, QuocGia, DienThoai, Fax, TrangChu) Bảng lưu trữ thông tin nhà cung cấp bao gồm mã, tên công ty, tên người liên hệ, danh nghĩa liên hệ, địa chỉ, thành phố, vùng, mã bưu điện, quốc gia, số điện thoại, số fax trang web công ty Yêu cầu: Tạo người dùng Northwind, thực import bảng vào schema Quan sát thông thương bảng, thiết lập ràng buộc toàn vẹn khóa ngoại khóa bảng Sử dụng truy vấn SQL, trả lời câu hỏi sau: a Liệt kê thông tin tất khách hàng bao gồm: mã khách hàng, tên, địa chỉ, thành phố đặt mua sản phẩm thuộc loại Beverages Sắp xếp theo thứ tự tăng dần tên khách hàng b Hãy cho biết tên sản phẩm, tên loại, tên nhà cung cấp cho sản phẩm đặt mua nhiều c Tìm khách hàng có đặt mua sản phẩm thuộc hai loại seafood beverages d Tính tổng giá trị bán tất mặt hàng theo tháng vùng e Với khách hàng, cho biết tên tổng số lượng mua sản phẩm mà khách hàng đặt mua nhiều Sử dụng PL/SQL, sinh viên thực yêu cầu sau: a Viết thủ tục nhận tham số đầu vào quốc gia, hiển thị hình tên, địa khách hàng số lần đặt hàng khách hàng thuộc quốc gia Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 137 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ b Tạo bảng DaGoi1997(MaDonDH, MaKH, MaNV, NgayDH, NgayPhaiGiao, NgayGoiHang), thiết lập ràng buộc khóa, miền giá trị,… cần thiết Viết thủ tục thực xen đơn đặt hàng đặt năm 1997 vào bảng c Viết hàm nhận tham số đầu vào tên nhân viên, hàm trả số đơn đặt hàng mà nhân viên tiếp nhận Viết câu lệnh SQL liệt kê tên tất nhân viên số đơn đặt hàng tiếp nhận tương ứng (sử dụng hàm vừa tạo) d Viết trigger kiểm tra việc xen dòng liệu vào bảng ChiTietDatHang Dòng liệu xen vào số lượng hàng đặt nhỏ số lượng hàng có kho hàng sản xuất, ngược lại xuất thông báo lỗi e Tạo thủ tục nhận tham số đầu vào tên khách hàng, hiển thị hình tất thông tin lần đặt hàng chi tiết hàng hóa lần đặt Giả sử hệ thống gồm nhóm người dùng sau: Khách hàng có quyền: SELECT LoaiHang HangHoa UPDATE KhachHang Kế toán có quyền: SELECT DonDatHang, ChiTietDatHang DaGoi1997 EXECUTE thủ tục câu 4a 4b Ban giám đốc có toàn quyền tất đối tượng schema Northwind Viết lệnh tạo role gán quyền tương ứng Tạo vài user để kiểm tra role Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 138 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ Phụ lục Các lỗi thường gặp 1.1 Lỗi chưa cấp quota cho người dùng Thông báo lỗi: ORA-01950: no privileges on tablespace 'USERS' Hướng giải quyết: cấp quota cho người dùng lệnh ALTER USER… 1.2 Lỗi không đủ quyền Thông báo lỗi: ORA-01031: insufficient privileges Hướng giải quyết: liên hệ nhà quản trị CSDL để cấp quyền tương ứng cho người dùng 1.3 Lỗi chưa tạo thư mục hệ thống cho thư mục đối tượng Thông báo lỗi: ORA-39002: invalid operation ORA-39070: Unable to open the log file ORA-29283: invalid file operation ORA-06512: at "SYS.UTL_FILE", line 475 ORA-29283: invalid file operation Hướng giải quyết: tạo thư mục tương ứng lệnh create directory… 1.4 Lỗi không đủ quyền thư mục đối tượng Thông báo lỗi: ORA-39002: invalid operation ORA-39070: Unable to open the log file ORA-39087: directory name HR is invalid Hướng giải quyết: gán quyền read write cho người dùng lệnh grant 1.5 Lỗi chưa tạo gọi sai tên net service name Thông báo lỗi: UDI-00008: operation generated ORACLE error 12154 ORA-12154: TNS:could not resolve the connect identifier specified Hướng giải quyết: kiểm tra lại net service name net manager Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 139 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ Các hàm xử lý liệu 2.1 Các hàm xử lý chuỗi: LENGTH(): Trả độ dài chuỗi INSTR(,,[,]): Trả vị trí xuất lần thứ i chuỗi b chuỗi a, bắt đầu tìm từ vị trí x Nếu x < tìm từ phải sang trái Ví dụ: SELECT INSTR('CORPORATE FLOOR','OR', 3, 2) FROM DUAL; ( 14) SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL; ( 2) Chú ý: DUAL bảng giả (dummy table) Oracle, bảng có trường sử dụng câu truy vấn không cần thiết tham chiếu đến bảng thực sở liệu SUBSTR(, [,]): Lấy y ký tự vị trí x chuỗi a Nếu x < tìm từ phải sang trái Nếu y lấy đến cuối chuỗi a Ví dụ: SELECT SUBSTR('ABCDEFG',3,4) "Substring" SELECT SUBSTR('ABCDEFG',-5,4) "Substring" ( CDEF) FROM DUAL; FROM DUAL; ( CDEF) CONCAT(,) hay phép toán ||: ghép chuỗi LOWER() (hay UPPER): Trả chuỗi dạng chữ thường (hay chữ hoa) tương ứng LTRIM (,) (hay RTRIM, TRIM): Cắt khỏi chuỗi a từ bên trái (hay từ bên phải, hay hai bên) ky tự có chuỗi b Ví dụ: XxyLAST SELECT LTRIM('xyxXxyLAST WORD','xy') FROM DUAL; ( WORD) 2.2 Các hàm xử lý ngày tháng EXTRACT(YEAR | MONTH | DAY FROM ): Trả thành phần, ngày, tháng, năm liệu kiểu date Ví dụ: SELECT EXTRACT(YEAR FROM DATE '1998-03-07') FROM DUAL; ( 1998) ADD_MONTHS(,): Trả ngày sau cộng n tháng vào ngày x Ví dụ: SELECT add_months(sysdate, 3) FROM DUAL; 17:19:12) ( MONTHS_BETWEEN(,): Số tháng ngày SYSDATE: Trả ngày tháng Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 140 20-Apr-2008 Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ 2.3 Các hàm chuyển kiểu TO_CHAR(): Chuyển số dạng chuỗi TO_CHAR(, ): Chuyển ngày dạng chuỗi Ví dụ: SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') DUAL; ( FROM 01-20-2008 17:29:05) TO_DATE(,):Chuyển chuỗi ngày Ví dụ: SELECT MONTHS_BETWEEN (TO_DATE('02-02-1995','MM-DD-YYYY'), TO_DATE('01-01-1995','MM-DD-YYYY') ) FROM DUAL; Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 141 ( 1,032) Khoa CNTT & Truyền Thông – Trường Đại Học Cần Thơ Tài liệu tham khảo Tham khảo cho chương 2: Thomas Connolly, Carolyn Begg; Database Systems – A practical approach to design, implementation, and Management; Addison Wesley, 4th edition 2005 Tham khảo cho chương 3: Christopher Allen; Oracle Database 10g PL/SQL 101; Oracle Press 2004 Gavin Powel, Carol McCullogh-Dieter; Oracle SQL JumpStart with Example; Elsevier 2005 Tham khảo hàm, thủ tục hệ thống Oracle: http://www.techonthenet.com/oracle/functions/index.php Cách sử dụng biểu thức quy Oracle: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_regex p.htm Cách sử dụng ngoại lệ PL/SQL: http://plsql-tutorial.com/plsql-exception-handling.htm Tham khảo quản lý giao dịch Oracle: http://www.tutorialized.com/view/tutorial/ Giáo Trình Hệ Quản Trị Cơ Sở Dữ Liệu – trang 142