Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 106 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
106
Dung lượng
1,09 MB
Nội dung
SQL PL/SQL Cơ Oracle - SQL PL/SQL MỤC LỤC MỤC LỤC .1 CHƯƠNG GIỚI THIỆU CHUNG .5 1.1 NGÔN NGỮ SQL 1.1.1 Lịch sử phát triển ngôn ngữ SQL 1.1.2 Chuẩn SQL 1.2 CÁC KHÁI NIỆM CƠ BẢN TRONG CƠ SỞ DỮ LIỆU 1.2.1 Các thành phần logic database 1.2.2 Các đối tượng database 1.2.3 Các nhóm lệnh SQL 1.3 CƠ SỞ DỮ LIỆU THỰC HÀNH 1.3.1 Mơ hình liệu 1.3.2 Cấu trúc bảng liệu 5 5 6 7 CHƯƠNG LỆNH TRUY VẤN CƠ BẢN 2.1 CÂU LỆNH TRUY VẤN 2.1.1 Quy tắc viết lệnh 2.1.2 Câu lệnh truy vấn 2.1.3 Các thành phần khác mệnh đề SELECT 2.1.4 Phân biệt giá trị liệu trả 2.1.5 Giá trị NULL 2.2 SQL*PLUS, CÔNG CỤ TƯƠNG TÁC LỆNH SQL VỚI DATABASE 2.2.1 Câu lệnh tương tác SQL*Plus 2.2.2 Phân nhóm câu lệnh SQL*Plus 2.2.3 Chi tiết lệnh SQL*Plus 2.3 BÀI TẬP 9 9 10 11 11 11 12 13 15 CHƯƠNG TRUY VẤN DỮ LIỆU CÓ ĐIỀU KIỆN 17 3.1 CÁC GIỚI HẠN TRONG TRUY VẤN DỮ LIỆU 3.1.1 Mệnh đề WHERE 3.1.2 Các toán tử sử dụng mệnh đề WHERE 3.1.3 Ví dụ sử dụng tốn tử điều kiện 3.2 SẮP XẾP DỮ LIỆU TRẢ VỀ 3.2.1 Mệnh đề ORDER BY 3.2.2 Sắp xếp nhiều cột liệu trả 3.3 BÀI TẬP .17 17 18 19 20 20 20 21 CHƯƠNG CÁC HÀM SQL 4.1 TỔNG QUAN VỀ HÀM SQL 4.1.1 Cấu trúc hàm SQL 4.1.2 Phân loại hàm SQL 4.2 HÀM SQL THAO TÁC TRÊN TỪNG DÒNG DỮ LIỆU 4.2.1 Các hàm thao tác kiểu liệu số 4.2.2 Các hàm thao tác kiểu liệu ký tự 4.2.3 Các hàm thao tác kiểu liệu thời gian 4.2.4 Các hàm chuyển đổi kiểu 4.3 HÀM THAO TÁC TRÊN TẬP HỢP 4.3.1 Các hàm tác động nhóm 4.3.2 Mệnh đề GROUP BY 4.4 MỘT SỐ HÀM MỚI BỔ SUNG TRONG Oracle9i 4.4.1 Hàm NULLIF 4.4.2 Hàm COALSCE 4.4.3 Câu lệnh case .23 23 23 23 24 24 26 30 32 34 34 35 36 36 36 36 Trang Oracle - SQL PL/SQL 4.5 BÀI TẬP 4.5.1 Hàm dòng liệu 4.5.2 Hàm nhóm liệu CHƯƠNG LỆNH TRUY VẤN DỮ LIỆU MỞ RỘNG 5.1 KẾT HỢP DỮ LIỆU TỪ NHIỀU BẢNG 5.1.1 Mối liên kết tương đương 5.1.2 Mối liên kết không tương đương 5.1.3 Mối liên kết cộng 5.1.4 Liên kết bảng với (tự thân) 5.1.5 Cách biểu diễn kết nối Oracle 9i 5.1.6 Các toán tử tập hợp 5.2 LỆNH TRUY VẤN LỒNG 5.2.1 Câu lệnh SELECT lồng 5.2.2 Toán tử SOME/ANY/ALL/NOT IN/EXITS 5.3 CẤU TRÚC HÌNH CÂY 5.3.1 Cấu trúc hình table 5.3.2 Kỹ thuật thực 5.3.3 Mệnh đề WHERE cấu trúc hình 5.4 BÀI TẬP CHƯƠNG BIẾN RUNTIME 6.1 DỮ LIỆU THAY THẾ TRONG CÂU LỆNH 6.2 LỆNH DEFINE 6.3 LỆNH ACCEPT 6.4 BÀI TẬP CHƯƠNG TABLE VÀ CÁC LỆNH SQL VỀ TABLE 7.1 LỆNH TẠO TABLE 7.1.1 Cú pháp tạo bảng 7.1.2 Tính tốn kích thước table (tham khảo) 7.2 MỘT SỐ QUY TẮC KHI TẠO TABLE 7.2.1 Quy tắc đặt tên Object 7.2.2 Quy tắc tham chiếu đến Object 7.3 Các Kiểu liệu 7.3.1 Kiểu CHAR 7.3.2 Kiểu VARCHAR2 7.3.3 Kiểu VARCHAR 7.3.4 Kiểu NUMBER 7.3.5 Kiểu FLOAT 7.3.6 Kiểu LONG 7.3.7 Kiểu DATE 7.3.8 Kiểu RAW kiểu LONG RAW 7.3.9 Kiểu ROWID 7.3.10 Kiểu MLSLABEL 7.3.11 Chuyển đổi kiểu 7.4 RÀNG BUỘC DỮ LIỆU TRONG TABLE 7.4.1 NULL/NOT NULL 7.4.2 UNIQUE 7.4.3 PRIMARY KEY 7.4.4 FOREIGN KEY ( Referential ) 7.4.5 CHECK 7.5 LỆNH DDL CAN THIỆP TỚI TABLE 7.5.1 Chỉnh sửa cấu trúc table 7.5.2 Các lệnh DDL khác 7.5.3 Chú dẫn cho table 7.5.4 Thay đổi tên object 7.5.5 Xóa liệu table 36 36 39 40 40 40 40 40 41 41 42 43 43 43 44 44 44 45 46 .50 50 50 51 51 .52 52 52 53 54 54 54 55 55 55 56 56 56 56 57 58 58 58 58 59 59 59 59 60 60 60 60 61 61 62 62 Trang Oracle - SQL PL/SQL 7.6 THÔNG TIN VỀ TABLE TRONG TỪ ĐIỂN DỮ LIỆU 7.7 BÀI TẬP .62 63 CHƯƠNG CÁC LỆNH THAO TÁC DỮ LIỆU 64 8.1 THAO TÁC DỮ LIỆU TRONG TABLE 8.1.1 Thêm dòng liệu 8.1.2 Cập nhật dòng liệu 8.1.3 Lệnh Merge 8.1.4 Xóa dịng liệu 8.1.5 Lỗi ràng buộc liệu 8.2 LỆNH ĐIỀU KHIỂN GIAO DỊCH 8.3 BÀI TẬP 64 64 65 65 66 66 66 67 CHƯƠNG SEQUENCE VÀ INDEX 9.1 SEQUENCE 9.1.1 Tạo Sequence 9.1.2 Thay đổi huỷ sequence 9.2 INDEX 9.2.1 Tạo index 9.2.2 Sử dụng index 9.3 BÀI TẬP CHƯƠNG 10 VIEWS .68 68 68 69 69 69 69 70 .71 10.1 VIEWS 10.1.1 Tạo view 10.1.2 Xóa view 10.2 BÀI TẬP .71 71 71 72 CHƯƠNG 11 QUYỀN VÀ BẢO MẬT 73 11.1 QUYỀN - PRIVILEGE 11.2 ROLE 11.3 SYNONYM 73 74 74 CHƯƠNG 12 GIỚI THIỆU NGÔN NGỮ PL/SQL 76 12.1 TỔNG QUAN VỀ PL/SQL 12.1.1 Cú pháp lệnh PL/SQL 12.1.2 Khối lệnh PL/SQL 12.2 LỆNH LẬP TRÌNH PL/SQL ĐƠN GIẢN 12.2.1 Lệnh IF 12.2.2 Lệnh lặp LOOP không định trước 12.2.3 Lệnh lặp LOOP có định trước 12.2.4 Lệnh lặp WHILE 12.2.5 Lệnh GOTO, nhảy vô điều kiện 12.3 GIỚI THIỆU CURSOR 12.4 CÁC KIỂU DỮ LIỆU THÔNG DỤNG 12.4.1 Kiểu liệu Table 12.4.2 Kiểu liệu Record 12.4.3 Sao kiểu liệu dòng 12.4.4 Sao kiểu liệu cột 12.4.5 Lệnh SELECT INTO 12.5 BÀI TẬP .76 76 76 77 77 78 78 78 78 79 81 81 81 82 82 82 83 CHƯƠNG 13 GIỚI THIỆU PROCEDURE BUILDER 84 13.1 CÁC THÀNH PHẦN TRONG PROCEDURE BUILDER 13.1.1 Object Navigator 13.1.2 Program Unit Editor 13.1.3 Store Program Unit Editor .84 84 85 85 Trang Oracle - SQL PL/SQL 13.1.4 Database Trigger Edditor 13.2 CÁC HÀM, THỦ TỤC 13.2.1 Tạo hàm, thủ tục Client 13.2.2 Tạo hàm, thủ tục Server 13.2.3 Dò lỗi hàm, thủ tục CHƯƠNG 14 GIỚI THIỆU CÁC THỦ TỤC, HÀM VÀ PACKAGE 14.1 THỦ TỤC 14.1.1 Tạo thủ tục 14.1.2 Huỷ bỏ thủ tục 14.1.3 Các bước lưu giữ thủ tục 14.2 HÀM 14.2.1 Tạo hàm 14.2.2 Thực hàm 14.2.3 Lợi ích việc sử dụng hàm 14.2.4 Một số hạn chế sử dụng hàm câu lệnh SQL 14.2.5 Huỷ bỏ hàm 14.2.6 Hàm thủ tục 14.3 PACKAGE 14.3.1 Cấu trúc package 14.3.2 Tạo package 14.3.3 Huỷ package 14.3.4 Lợi ích việc sử dụng package 14.3.5 Một số package chuẩn Oracle CHƯƠNG 15 DATABASE TRIGGER 15.1 TẠO TRIGGER 15.1.1 Phân loại trigger 15.1.2 Lệnh tạo trigger 15.1.3 Sử dụng Procedure builder để tạo trigger 15.2 QUẢN LÝ TRIGGER 15.2.1 Phân biệt database trigger 15.2.2 Thay đổi trạng thái database trigger 15.2.3 Huỷ bỏ trigger 15.2.4 Lưu ý sử dụng trigger PHỤ LỤC A - TÀI LIỆU THAM KHẢO B - DANH MỤC CÁC HÌNH VẼ 85 86 86 86 87 .88 88 88 89 89 89 90 90 91 91 91 92 92 92 93 95 95 96 97 97 97 98 99 100 100 101 101 102 .103 103 103 Trang Oracle - SQL PL/SQL Chương GIỚI THIỆU CHUNG 1.1.NGÔN NGỮ SQL 1.1.1 Lịch sử phát triển ngôn ngữ SQL Mơ hình sở liệu (CSDL) quan hệ - RDBMS, E.F Codd đưa vào đầu thập kỷ 70 Từ đến nay, liên tục phát triển trở thành mơ hình CSDL phổ biến bậc Mơ hình quan hệ gồm thành phần sau: Tập hợp đối tượng / mối quan hệ Tập hợp xử lý tác động tới quan hệ Ràng buộc liệu đảm bảo tính xác quán SQL (Structured Query Language, đọc "sequel") tập lệnh truy xuất CSDL quan hệ Ngôn ngữ SQL IBM sử dụng hệ quản trị CSDL System R vào năm 70 Hệ ngôn ngữ SQL (SEQUEL2) IBM công bố vào tháng 11 năm 1976 Năm 1979, tập đoàn Oracle giới thiệu thương phẩm SQL SQL cài đặt hệ quản trị CSDL DB2 IBM SQL/DS Ngày nay, SQL sử dụng rộng rãi đuợc xem ngôn ngữ chuẩn để truy cập CSDL quan hệ 1.1.2 Chuẩn SQL Năm 1989, viện tiêu chuẩn quốc gia Hoa Kỳ (ANSI) công nhận SQL ngôn ngữ chuẩn để truy cập CSDL quan hệ văn ANSI SQL89 Năm 1989, tổ chức tiêu chuẩn quốc tế (ISO) công nhận SQL ngôn ngữ chuẩn để truy cập CSDL quan hệ văn ISO 9075-1989 Tất hệ quản trị CSDL lớn giới cho phép truy cập SQL hầu hết theo chuẩn ANSI 1.2.CÁC KHÁI NIỆM CƠ BẢN TRONG CƠ SỞ DỮ LIỆU 1.2.1 Các thành phần logic database Thành phần Diễn giải Table Cấu trúc lưu trữ CSDL quan hệ (RDBMS), bao gồm nhiều columns (cột liệu) với nhiều rows (dòng liệu) Row Tổ hợp giá trị Column bảng Một row gọi record (bản ghi) Column Quy định loại liệu bảng Ví dụ: loại liệu tên phịng ban có bảng phịng ban Ta thể hiển thị column thông qua tên column kèm theo vài thơng tin khác column kiểu liệu, độ dài liệu Field Giao column row Field nơi chứa liệu Nếu khơng có liệu field ta nói field có gia trị NULL Primary Key Là column tập column xác định tính rows bảng Ví dụ DEPTNO Primary Key bảng DEPT dùng để xác định phịng ban bảng DEPT mà đại diện row liệu Trang Oracle - SQL PL/SQL Primary Key thiết phải có số liệu Foreign Key Là column tập columns có tham chiếu tới bảng bảng khác Foreign Key xác định mối quan hệ bảng Constraints Là ràng buộc liệu bảng thuộc database Ví dụ: Foreign Key, Primary Key Ví dụ: minh hoạ thành phần logic database EMP Row DEPT EMPNO ENAME 7369 SMITH 20 7499 ALLEN 30 10 ACCOUNTING 7521 WARD 30 20 RESEARCH 7566 JONES 20 30 SALES 7654 MARTIN 30 7698 BLAKE 30 40 OPERATIONS EMP DEPT DEPTNO DEPTNO DNAME Foreign key 7782 CLARK 10 Primary key Column Hình vẽ Minh hoạ thành phần logic database 1.2.2 Các đối tượng database Đối tượng Diễn giải Table Cấu trúc lưu trữ CSDL quan hệ (RDBMS), gồm row column View Là cấu trúc logic hiển thị liệu từ nhiều bảng Sequence Lết sinh giá trị cho primary key Index Tăng tính thực thi cho câu lệnh truy vấn Synonym Tên tương đương đối tượng Program unit Tập hợp câu lệnh thực viết ngôn ngữ SQL PL/SQL, bao gồm Procedure, function, package 1.2.3 Các nhóm lệnh SQL Tên lệnh Diễn giải SELECT Là lệnh thông dụng nhất, dùng để lấy, xem liệu CSDL INSERT UPDATE DELETE Là lệnh dùng để nhập thêm row mới, thay đổi nội dung liệu row hay xoá row table Những lệnh gọi lệnh thao tác liệu DML (Data Manipulation Language) Trang Oracle - SQL PL/SQL CREATE ALTER DROP RENAME TRUNCATE COMMIT ROLLBACK SAVE POINT Là lệnh dùng để thiết lập, thay đổi hay xoá bỏ cấu trúc liệu table, view, index Những lệnh gọi lệnh định nghĩa liệu DDL (Data Definition Language) Quản lý việc thay đổi liệu lệnh DML Việc thay đổi liệu nhóm lại thành transaction lệnh dùng để gán huỷ quyền truy nhập vào CSDL Oracle cấu trúc bên Những lệnh gọi lệnh điều khiển liệu DCL (Data Control Language) GRANT REVOKE 1.3.CƠ SỞ DỮ LIỆU THỰC HÀNH 1.3.1 Mơ hình liệu DEPT EMP SALGRADE BONUS DUMMY Hình vẽ Mơ hình liệu thực hành 1.3.2 Cấu trúc bảng liệu Bảng DEPT Tên cột Kiểu Điều kiện PRIMARY KEY Diễn giải Mã phòng ban DEPTNO NUMBER(2) DNAME VARCHAR2(14) Tên phòng ban LOC VARCHAR2(13) Địa Bảng SALGRADE Tên cột Kiểu Điều kiện PRIMARY KEY Diễn giải Mức lương GRADE NUMBER LOSAL NUMBER Giá trị thấp HISAL NUMBER Giá trị cao Trang Oracle - SQL PL/SQL Bảng EMP Tên cột Kiểu Điều kiện EMPNO NUMBER(4) PRIMARY KEY ENAME VARCHAR2(10) JOB VARCHAR2 (9) MGR NUMBER(4) HIREDATE DATE Ngày gia nhập công ty SAL NUMBER(7,2) Lương COMM NUMBER(7,2) DEPTNO NUMBER(2) NOT NULL, Diễn giải Mã nhân viên Tên nhân viên Nghề nghiệp FOREIGN KEY (EMP.EMPNO) Mã người quản lý Thưởng FOREIGN KEY (DEPT.DEPTNO) Mã phòng ban Trang Oracle - SQL PL/SQL Chương LỆNH TRUY VẤN CƠ BẢN 2.1.CÂU LỆNH TRUY VẤN 2.1.1 Quy tắc viết lệnh Các câu lệnh truy vấn biểu diễn theo quy tắc sau: Các lênh câu lệnh SQL thuộc loại không phân biệt chữ viết hoa hay thường Nội dung câu lệnh SQL trải dài nhiều dịng Các từ khố khơng phép viết tắt hay phân cách nhiều dòng Các mệnh đề thơng thường đặt nhiều dịng khác Để rõ ràng việc thể câu lệnh, ta nên sử dụng dấu TAB viết lệnh Ta sử dụng ký tự đặc biệt như: +, -, \, *, để biểu diễn giá trị câu lệnh Lệnh kết thúc dấu chấm phẩy (;) 2.1.2 Câu lệnh truy vấn Cú pháp: SELECT FROM [DISTINCT ] table; {*, column [alias], } Với: SELECT DISTINCT column alias FROM table Hiển thị nội dung hay nhiều cột Phân biệt nội dung dòng liệu trả Lấy tất các cột bảng Tên cột liệu cần trả Phần tiêu đề cột liệu trả Tên bảng chứa liệu truy vấn Ví dụ: SELECT FROM emp; Cấu trúc lệnh truy vấn gồm có hai phần: Mệnh đề chọn lựa bao gồm Lệnh SELECT tên cột liệu trả Mệnh đề biểu diễn nơi chứa bao gồm FROM tên bảng 2.1.3 Các thành phần khác mệnh đề SELECT Trong mệnh đề SELECT cịn đưa vào thành phần khác: Biểu thức toán học Column alias Các column ghép chuỗi Literal Biểu thức toán học Trong mệnh đề SELECT biểu thức tốn học giá trị (column hàng số), toán tử, hàm Các toán tử dùng (+), (-), (*), (/) Độ ưu tiên tốn tử giống phần số học Ví dụ: Trang Oracle - SQL PL/SQL WHEN v_User_exp THEN p_Error := ‘Lỗi: Phần trăm nhỏ 0’; RETURN; WHEN others THEN p_Error := ‘Lỗi: ‘ || SQLERRM; END; Với việc tạo thủ tục thông qua câu lệnh, ta dễ dàng tạo script chứa thủ tục cần thiết tạo database Một cách khác, ta tạo hay sửa đổi thủ tục thông qua công cụ Oracle Trong chương trước, ta biết cách sử dụng Procedure Builder để tạo thủ tục 14.1.2 Huỷ bỏ thủ tục Tương tự việc tạo thủ tục, ta huỷ bỏ thủ tục thông qua câu lệnh SQL Cú pháp: DROP PROCEDURE Tên thủ tục; DROP PROCEDURE change_sal; Ví dụ: 14.1.3 Các bước lưu giữ thủ tục Một thủ tục Oracle thực theo hai bước sau: Nội dung thủ tục thiết lập lưu giữ database dạng văn (text) Toàn nội dung thủ tục biên dịch dạng mã p-code, tiện cho viêc thực thủ tục Hình vẽ 13 Các bước thực thủ tục 14.2.HÀM Tương tự thủ tục, hàm (function) nhóm lệnh PL/SQL thực chức Khác với thủ tục, hàm trả giá trị lời gọi Trang 89 Oracle - SQL PL/SQL Hàm lưu giữ database dạng Store procedure 14.2.1 Tạo hàm Ta tạo hàm trực tiếp dịng lệnh sau: Cú pháp: CREATE [OR REPLACE] FUNCTION function_name [(argument1 [mode1] datatype1, argument2 [mode2] datatype2, )] RETURN datatype IS | AS BEGIN PL/SQL Block; END; Với: function_name argument mode datatype PL/SQL Block Tên hàm Tên tham số Loại tham số: IN OUT IN OUT, mặc định IN Kiểu liệu tham số Nội dung khối lệnh SQL PL/SQL thủ tục Ví dụ: CREATE OR REPLACE FUNCTION get_sal (p_Emp_id IN number) RETURN varchar2 IS BEGIN SELECT sal FROM emp WHERE emp_id = p_Emp_id; RETURN null; EXCEPTION WHEN others THEN RETURN ‘Lỗi: ‘ || SQLERRM; END; 14.2.2 Thực hàm Quá trình lưu giữ biên dịch hàm tương tự thủ tục Quá trình gọi thực hàm diễn theo ba bước: Việc gọi hàm thực tên hàm biểu thức tham chiếu tới Một biến host (host variable) tự động tạo để lưu giữ giá trị trả hàm Thực nội dung phần thân hàm, lưu lại giá trị Trang 90 Oracle - SQL PL/SQL Ví dụ: SQL> VARIABLE v_Sal number; SQL> EXECUTE :v_SAL := get_sal(7934); PL/SQL procedure successfully completed SQL> PRINT v_Sal; v_Sal 1300 14.2.3 Lợi ích việc sử dụng hàm Với việc sử dụng hàm, số trường hợp ta thấy lợi điểm sau: Cho phép thực thao tác phức tạp (các phép tìm kiếm, so sánh phức tạp) mệnh đề câu lệnh SQL mà không sử dụng hàm ta thực Tăng tính độc lập liệu việc phân tích xử lý liệu thực Server thay trả liệu trực tiếp cho ứng dụng Client để chúng tiếp tục xử lý Tăng tính hiệu câu lệnh truy vấn việc gọi hàm câu lệnh SQL Ta sử dụng hàm để thao tác kiểu liệu tự tạo Cho phép thực đồng thời câu lệnh truy vấn 14.2.4 Một số hạn chế sử dụng hàm câu lệnh SQL Chỉ hàm người dùng định nghĩa lưu database sử dụng cho câu lệnh SQL Các hàm người dùng định nghĩa áp dụng cho điều kiện thực dịng liệu (mệnh đề WHERE), khơng thể áp dụng cho điều kiện thực nhóm (mệnh đề GROUP) Tham số sử dụng hàm loại IN, khơng chấp nhận giá trị OUT hay giá trị IN OUT Kiểu liệu trả hàm phải kiểu liệu DATE, NUMBER, NUMBER Không cho phép hàm trả kiểu liệu BOOLEAN, RECORD, TABLE Kiểu liệu trả phải tương thích với kiểu liệu bên Oracle Server 14.2.5 Huỷ bỏ hàm Tương tự việc tạo hàm, ta huỷ bỏ hàm thơng qua câu lệnh SQL Cú pháp: DROP FUNCTION Tên hàm; Ví dụ: DROP FUNCTION get_sal; Trang 91 Oracle - SQL PL/SQL 14.2.6 Hàm thủ tục Ta tạo thủ tục để lưu giữ loạt các câu lệnh phục vụ cho nhiều lần gọi khác Thủ tục khơng có, có nhiều tham số Tuy nhiên thủ tục không trả lại kết Hàm giống thủ tục, bao gồm loạt câu lệnh, khơng có, có nhiều tham số Tuy nhiên khác với thủ tục, hàm trả kết Vì vậy, ta sử dụng hàm phép tính tốn, gán giá trị Khi đó, câu lệnh thực dễ dàng sáng sủa So sánh hàm thủ tục Thủ tục Hàm Thực giống thực câu lệnh PL/SQL Có thể gọi giống phần biểu thức Khơng có kiểu giá trị trả Có chứa giá trị trả Có thể trả nhiều giá trị (thông qua tham số OUT) Trả giá trị Lợi ích việc sử dụng hàm, thủ tục Nâng cao hiệu suất: Tránh việc tái sử dụng câu lệnh nhiều lần nhiều User khác Giảm thiểu thời gian biên dịch câu lệnh PL/SQL pha phân tích câu lệnh Giảm thiểu số lần gọi lệnh thực database, từ đó, làm giảm lưu lượng truyền thơng mạng Nâng cao khả bảo trì: Ta dễ dàng sửa nội dung bên hàm, thủ tục mà không ảnh hưởng đến việc giao tiếp chúng (các tham số lời gọi y nguyên) Thay đổi nội dung hàm, hay thủ tục ứng dụng cho nhiều user khác Tăng tính bảo mật tồn vẹn liệu: Với việc điều khiển truy nhập liệu dán tiếp đối tượng database làm nâng cao tính bảo mật liệu Quan hệ câu lệnh hàm, thủ tục đảm bảo 14.3.PACKAGE Package tập hợp kiểu liệu, biến lưu giữ giá trị thủ tục, hàm có mối liên hệ với nhau, gộp chung lại Đặc điểm bật package phần tử package gọi tồn nội dung package nạp vào hệ thống Do đó, việc gọi tới phần tử khác package sau thời gian nạp vào hệ thống Từ đó, nâng cao tốc độ thực lệnh toàn hàm, thủ tục có package 14.3.1 Cấu trúc package Một package cấu trúc làm hai phần Phần mô tả (specification) định nghĩa giao tiếp có package với bên Phần thân (body) cài đặt cho giao tiếp có phần mơ tả Trang 92 Oracle - SQL PL/SQL Hình vẽ 14 Cấu trúc package Trong cấu trúc package bao gồm 05 thành phần: Public variable (biến công cộng): biến mà ứng dụng bên ngồi tham chiếu tới Public procedure (thủ tục công cộng): bao gồm hàm, thủ tục package triệu gọi từ ứng dụng bên Private procedure (thủ tục riêng phần): hàm, thủ tục có package triệu gọi hàm hay thủ tục khác package mà Global variable (biến tổng thể): biến khai báo dùng toàn package, ứng dụng bên tham chiếu tới biến Private variable (biến riêng phần): biến khai báo hàm, thủ tục thuộc package Nó tham chiếu đến thân hàm hay thủ tục 14.3.2 Tạo package Ta tạo package trực tiếp dòng lệnh sau: Cú pháp khai báo phần mô tả package: CREATE [OR REPLACE] PACKAGE package_name IS | AS public type and item declarations subprogram specifications END package_name; Với: package_name Tên package type and item declarations subprogram specifications PL/SQL Phần khai báo biến, hằng, cursor, ngoại lệ kiểu sử dụng toàn package Khai báo hàm, thủ tục Cú pháp khai báo phần thân package: CREATE [OR REPLACE] PACKAGE BODY package_name Trang 93 Oracle - SQL PL/SQL IS | AS private type and item declarations subprogram bodies Khai báo kiểu sử dụng riêng package Nội dung package END package_name; Với: package_name type and item declarations subprogram specifications Tên package Phần khai báo biến, hằng, cursor, ngoại lệ kiểu Khai báo hàm, thủ tục PL/SQL Ví dụ: Phần khai báo package CREATE OR REPLACE PACKAGE comm_package IS v_comm number := 10; Khai báo biến có giá trị khởi tạo Khai báo thủ tục để giao tiếp với bên PROCEDURE reset_comm (p_comm IN number); END comm_package; Phần thân package CREATE OR REPLACE PACKAGE BODY comm_package IS Hàm riêng phần sử dụng package FUNCTION validate_comm (v_comm IN number) RETURN BOOLEAN IS v_max_comm number; BEGIN SELECT max(comm) INTO v_max_comm FROM emp; IF v_comm > v_max_comm THEN RETURN FALSE; ELSE RETURN TRUE; END IF; END validate_comm; Thủ tục giao tiếp với bên PROCEDURE reset_comm (p_comm IN number) IS Trang 94 Oracle - SQL PL/SQL v_valid BOOLEAN; BEGIN v_valid := validate_comm(p_comm); IF v_valid = TRUE THEN v_comm := p_comm; ELSE RAISE_APPLICATION_ERROR(-20210,‘Invalid END IF: END reset_comm; END comm_package; comm’); 14.3.3 Huỷ package Tương tự việc tạo package, ta huỷ bỏ hàm thơng qua câu lệnh SQL Cú pháp: Huỷ phần package specification DROP PACKAGE Tên package; Huỷ phần package body DROP PACKAGE BODY Tên package; Ví dụ: DROP PACKAGE DROP PACKAGE comm_package; BODY comm_package; 14.3.4 Lợi ích việc sử dụng package Tăng tính phân nhỏ thành phần (Modularity) Ta đóng gói thành phần, cấu trúc có quan hệ logic với module ứng với package Việc kế thừa package đơn giản, thực cách sáng Đơn giản việc thiết kế ứng dụng Tất thông tin cần thiết cho việc giao tiếp đặt phần đặc tả package (package specification) Nội dung phần soạn thảo biên dịch độc lập với phần thân package (package body) Do đó, hàm hay thủ tục có gọi tới thành phần package biên dịch tốt Phần thân package tiếp tục phát triển hoàn thành ứng dụng ẩn dấu thông tin (hiding information) Package cho phép sử dụng thành phần bên dạng public (công cộng) hay private (riêng tư) Tuỳ theo yêu cầu thiết kế, ta cho phép truy nhập hay ẩn dấu thơng tin Từ đó, bảo vệ tính tồn vẹn liệu Nâng cao hiệu suất sử dụng Ngay gọi hàm hay thủ tục package lần Toàn nội dung package nạp vào nhớ Do vậy, hàm thủ tục package gọi đến sau thực mà không cần phải nạp lại vào nhớ Việc làm giảm thiểu thao tác truy xuất vào (I/O access) nâng cao tốc độ Trang 95 Oracle - SQL PL/SQL Thực tải (overloading) Package cho phép thực tải hàm thủ tục Theo đó, hàm thủ tục khác phép đặt trùng tên Việc nâng cao tính mềm dẻo việc sử dụng hàm, thủ tục package 14.3.5 Một số package chuẩn Oracle Thủ tục Hàm DBMS_ALERT Cung cấp kiện thông điệp database DBMS_APPLICATION_INFO Thông tin hoạt động thời database DBMS_DDL Biên dịch lại hàm, thủ tục va package Phân tích index, table, cluster, DBMS_DESCRIBE Trả diễn giải cho tham số thủ tục, hàm DBMS_JOB Lên kế hoạch thực đoạn mã lệnh PL/SQL DBMS_LOCK Cung cấp hàm cho phép yêu cầu, giải phóng, điều chỉnh trạng thái khoá (lock) đối tượng database DBMS_MAIL Gửi message từ Oracle Server tới Oracle*mail DBMS_OUTPUT Kết xuất giá trị trả từ hàm, thủ tục, trigger, DBMS_PIPE Cho phép xử lý gửi đồng thời thông điệp DBMS_SESSION Cung cấp phép truy nhập SQL thay câu lệnh session DBMS_SHARED_POOL Cho phép lưu giữ đối tượng vùng nhớ chia sẻ DBMS_SQL Cho phép sử dụng lệnh SQL động để truy xuất database DBMS_TRANSACTION Điều khiển giao dịch, cải thiện nâng cao hiệu giao dịch nhỏ khơng phân tán DBMS_UTILITY Phân tích đối tượng schema UTL_FILE Cho phép truy xuất tới file với câu lệnh PL/SQL Trang 96 Oracle - SQL PL/SQL Chương 15 DATABASE TRIGGER Database trigger thủ tục thực ngầm định thực lệnh SQL INSERT, DELETE, UPDATE nhằm đảm bảo quy tắc logic phức tạp liệu Thiết kế database trigger thoả mãn yêu cầu sau: Sử dụng database trigger nhằm đảm bảo thực tất thao tác có liên quan tới lệnh can thiệp liệu thực Chỉ sử dụng database trigger thao tác trọng tâm Không sử dụng database trigger để thực ràng buộc sẵn có database Oracle Ví dụ: dùng database trigger để thay cho constrain Sử dụng database trigger gây rối, khó khăn cho việc bảo trì phát triển hệ thống lớn Vì thế, ta sử dụng database trigger thật cần thiết 15.1.TẠO TRIGGER Khi tạo database trigger, ta cần lưu ý tới số tiêu chí như: Thời gian thực hiện: BEFORE, AFTER Hành động thực hiện: INSERT, UPDATE, DELETE Đối tượng tác động: bảng liệu Loại trigger thực hiện: dòng lệnh hay câu lệnh Mệnh đề điều kiện thực Nội dung trigger 15.1.1 Phân loại trigger Ta phân loại trigger theo thời gian thực như: BEFORE AFTER BEFORE trigger: Trigger kích hoạt trước thực câu lệnh Việc cho phép ta loại bớt phép xử lý khơng cần thiết, chí rollback liệu trường hợp gây ngoại lệ (exception) Trigger thuộc loại thường sử dụng thao tác INSERT UPDATE AFTER trigger: Câu lệnh thực xong trigger kích hoạt Thực cơng việc thường phải làm sau thực câu lệnh INSTEAD OF trigger: Loại trigger cho phép người sử dụng thay đổi cách suốt liệu số view mà thực thay đổi trực tiếp Với INSTEAD OF trigger, ta thực với ba thao tác: insert, update, delete Ta phân loại trigger theo loại câu lệnh kích hoạt như: INSERT, UPDATE, DELETE Trong trigger thuộc ba loại lệnh: INSERT, UPDATE,DELETE Trigger UPDATE cần phải rõ thêm tên cột liệu kích hoạt trigger giá trị liệu bị thay đổi Bên Trigger có chứa lệnh thao tác liệu Do đó, cần phải tránh trường hợp lặp lại theo kiểu đệ quy Một cách khác ta phân loại trigger theo số lần kích hoạt theo có 02 loại trigger: Trigger mức lệnh: Trigger kích hoạt thực câu lệnh Trigger mức dòng lệnh: Trigger kích nhiều lần ứng với dịng liệu chịu ảnh hưởng thao tác thực lênh Trang 97 Oracle - SQL PL/SQL Hình vẽ 15 Thứ tự thực trigger 15.1.2 Lệnh tạo trigger Ta tạo trigger thơng qua lệnh script Cú pháp lệnh tạo trigger mức câu lệnh: CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name BEGIN PL/SQL Block; END; Cú pháp lệnh tạo trigger mức dòng liệu: CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name [REFERENCING OLD AS old | NEW AS new] FOR EACH ROW [WHEN condition] BEGIN PL/SQL Block; END; Với: trigger _name timing event referencing FOR EACH ROW WHEN table_name PL/SQL Block Tên trigger Thời gian kích hoạt trigger Loại câu lệnh kích hoạt trigger Tên biến thay cho giá trị trước sau thay đổi dòng liệu xử lý Trigger thuộc loại tác động dòng liệu Chỉ số điều kiện ràng buộc thực trigger Tên bảng liệu có gắn trigger Nội dung khối lệnh SQL PL/SQL trigger Trang 98 Oracle - SQL PL/SQL Ví dụ: CREATE OR REPLACE TRIGER BEFORE INSERT ON emp secure_emp BEGIN IF TO_CHAR(sysdate,’DY’) IN (‘SAT’,’SUN’) OR TO_CHAR(sysdate,’HH24’) NOT BETWEEN ‘08’ AND ’18’ THEN RAISE_APPLICATION_ERROR (-20500, ’Thời gian làm việc không phù hợp’); END IF; END; CREATE OR REPLACE TRIGER audit_emp_values AFTER DELETE OR INSERT OR DELETE ON emp FOR EACH ROW BEGIN INSERT INTO audit_emp_values (user_name, timestamp, id, old_last_name, new_last_name, old_title, new_tile, old_salary, new_salary) VALUES (USER, SYSDATE, :old.empno, :old.ename, :new.ename, :old.job, :new.job, :old.sal, :new.sal); END; 15.1.3 Sử dụng Procedure builder để tạo trigger Ta tạo database trigger thơng qua cơng cụ Procedure builder Oracle Ta thực theo bước sau: Kết nối tới database Dịch chuyển tới đối tượng đặt trigger phần Object Navigator Chuyển tới phần trigger bấm nút New để tạo trigger Đặt tuỳ chọn thời gian, kiểu, cho trigger Soạn thảo nội dung trigger Lưu giữ trigger Trang 99 Oracle - SQL PL/SQL Hình vẽ 16 Tạo trigger cơng cụ Procedure Builder Hình vẽ 17 Trigger tác động dòng liệu 15.2.QUẢN LÝ TRIGGER 15.2.1 Phân biệt database trigger Trigger thủ tục Trigger Thủ tục Lệnh tạo CREATE TRIGGER Lệnh tạo CREATE PROCEDURE Lưu giữ Từ điển liệu dạng mã nguồn dạng p-code Lưu giữ Từ điển liệu dạng mã nguồn dạng p-code Được gọi ngầm định Thực theo lời gọi tường minh Không cho phép dùng: COMMIT, ROLLBACK, SAVEPOINT Cho phép dùng: COMMIT, ROLLBACK, SAVEPOINT Trang 100 Oracle - SQL PL/SQL Database Trigger Form Trigger Database Trigger Form Trigger Được thực có tác động lên database ứng dụng cơng cụ Oracle Được thực tác động ứng dụng Được kích hoạt lệnh SQL Phân biệt hai loại trigger câu lệnh dòng liệu Tuỳ theo lỗi xảy ra, trigger gây rollback câu lệnh Được kích kiện ứng dụng Không phân biệt Tuỳ theo lỗi xảy ra, rollback tồn giao dịch Database Trigger kích hoạt độc lập với Form Trigger 15.2.2 Thay đổi trạng thái database trigger Cho phép/ không cho phép kích hoạt databse trigger Cú pháp: ALTER TRIGGER trigger_name trigger_name Tên trigger; DISABLE | ENABLE; Với: Ví dụ: Cho phép trigger hoạt động ALTER TRIGGER check_sal ENABLE; Cho phép/ khơng cho phép kích hoạt tất databse trigger bảng Cú pháp: ALTER TABLE table_name DISABLE | ENABLE ALL TRIGGERS; table_name Tên bảng; Với: Ví dụ: Khơng cho phép trigger ứng với bảng emp hoạt động ALTER TABLE emp DISABLE ALL TRIGGERS; Biên dịch lại databse trigger Cú pháp: ALTER TRIGGER trigger_name COMPILE; Ví dụ: Biên dịch lại trigger check_sal sau sửa đổi nội dung ALTER TRIGGER check_sal COMPILE; 15.2.3 Huỷ bỏ trigger Sử dụng câu lệnh SQL để huỷ bỏ trigger Trang 101 Oracle - SQL PL/SQL Cú pháp: DROP TRIGGER trigger_name; DROP TRIGGER check_sal; Ví dụ: 15.2.4 Lưu ý sử dụng trigger Các trường hợp kiểm tra trigger Kiểm tra trigger với thao tác liệu dự định Kiểm tra thực trigger theo mệnh đề When Kiểm tra ảnh hưởng trigger trigger khác Kiểm tra ảnh hưởng trigger khác trigger xem xét Thứ tự thực trigger kiểm tra ràng buộc: Thực trigger BEFORE STATMENT Lặp nhiều dòng liệu a Thực trigger BEFORE ROW b Thực câu lệnh thao tác liệu kiểm tra toàn vẹn liệu dòng liệu xem xét c Thực trigger AFTER ROW Thực phép kiểm tra ràng buộc Thực trigger AFTER STATMENT Các quy tắc ràng buộc trigger: Không phép sửa đổi liệu cột liệu có ràng buộc thuộc loại khố (primary key), khố ngồi (foreign key) hay Không cho phép đọc liệu từ bảng thao tác Trang 102 Oracle - SQL PL/SQL PHỤ LỤC A - DANH MỤC CÁC HÌNH VẼ Hình vẽ Minh hoạ thành phần logic database Hình vẽ Mơ hình liệu thực hành Hình vẽ Câu lệnh SQL*Plus Hình vẽ Hạn chế liệu trả Hình vẽ Cấu trúc hàm SQL Hình vẽ Phân loại hàm SQL Hình vẽ Cấu trúc Object Navigator Hình vẽ Soạn thảo hàm, thủ tục phía Client Hình vẽ Soạn thảo hàm, thủ tục, trigger phía Server Hình vẽ 10 Tạo hàm, thủ tục Client Hình vẽ 11 Tạo hàm, thủ tục Server Hình vẽ 12 Màn hình PL/SQL Interpreter Hình vẽ 13 Các bước thực thủ tục Hình vẽ 14 Cấu trúc package Hình vẽ 15 Thứ tự thực trigger Hình vẽ 16 Tạo trigger công cụ Procedure Builder Hình vẽ 17 Trigger tác động dịng liệu .6 12 17 23 24 84 85 86 86 87 87 89 93 98 100 100 Trang 103