1. Trang chủ
  2. » Công Nghệ Thông Tin

BÀI GIẢNG ORACLE cơ bản SQL và PL SQL

106 874 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

BÀI GIẢNG: ORACLE CƠ B N - SQL VÀ PL/SQL Thuvientailieu.net.vn 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 toá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 .23 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 24 24 26 30 32 34 34 35 36 36 36 36 Trang Thuvientailieu.net.vn 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 36 36 39 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 40 40 40 40 40 41 41 42 43 43 43 44 44 44 45 46 .50 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 toá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 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 Thuvientailieu.net.vn 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 .68 68 68 69 69 69 69 70 CHƯƠNG 10 VIEWS .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 Thuvientailieu.net.vn 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 85 86 86 86 87 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 .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 A - TÀI LIỆU THAM KHẢO B - DANH MỤC CÁC HÌNH VẼ 103 103 Trang Thuvientailieu.net.vn 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 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 Thuvientailieu.net.vn 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 Thuvientailieu.net.vn 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 GRADE NUMBER LOSAL NUMBER Giá trị thấp HISAL NUMBER Giá trị cao Mức lương Trang Thuvientailieu.net.vn 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) Thuvientailieu.net.vn 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ừ khoá 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 đư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 toán học giá trị (column hàng số), toán tử, hàm Các toán tử dùng (+), (-), (*), (/) Độ ưu tiên toán tử giống phần số học Ví dụ: Trang Thuvientailieu.net.vn 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 Thuvientailieu.net.vn 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 Thuvientailieu.net.vn 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), á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 Thuvientailieu.net.vn 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 toá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 toà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 toà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 Thuvientailieu.net.vn 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 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 Thuvientailieu.net.vn 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 Thuvientailieu.net.vn 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 toà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 Thuvientailieu.net.vn 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 Thuvientailieu.net.vn 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 Thuvientailieu.net.vn 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 Thuvientailieu.net.vn 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 Thuvientailieu.net.vn 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 Thuvientailieu.net.vn 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 toà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 Thuvientailieu.net.vn 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 khoá (primary key), khoá (foreign key) hay Không cho phép đọc liệu từ bảng thao tác Trang 102 Thuvientailieu.net.vn 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 Thuvientailieu.net.vn [...]... Thuvientailieu.net.vn Oracle cơ bản - SQL và PL /SQL Hình vẽ 3 Câu lệnh của SQL* Plus Khác biệt giữa lệnh SQL và SQL* Plus SQL Là ngôn ngữ để giao tiếp với Oracle Server trong việc truy xuất dữ liệu Câu lệnh dựa trên bộ ký tự chuẩn ASCII Câu lệnh không được viết tắt Nhận dạng lệnh SQL và gửi lệnh lên Server Tuỳ thuộc vào từng phiên bản của Oracle Không Thao tác trên các dữ liệu có trong các bảng đã được định... comm IS 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 của SQL* Plus Oracle hỗ trợ công cụ SQL* Plus cho phép người sử dụng có thể tương tác trực tiếp với Oracle Server thông qua các câu lệnh SQL và PL /SQL Theo đó người sử dụng có thể tương tác với Oracle Server thông qua hai loại câu lệnh: Câu lệnh SQL Câu lệnh của bản thân chương trình SQL* Plus Trang 11 Thuvientailieu.net.vn... thưởng và nghề nghiệp là SALEMAN, sắp theo thứ tự lương giảm dần và tên tăng dần ANUAL_SAL 19200 18000 15000 COMM 300 0 500 Trang 22 Thuvientailieu.net.vn Oracle cơ bản - SQL và PL /SQL Chương 4 CÁC HÀM SQL 4.1.TỔNG QUAN VỀ HÀM SQL 4.1.1 Cấu trúc hàm SQL Hàm SQL là một đặc điểm làm tăng khả năng sử dụng câu lệnh SQL Hàm SQL có thể nhận nhiều tham số vào và trả về chỉ một giá trị Hình vẽ 5 Cấu trúc hàm SQL. .. liệu đầu vào tại mỗi dòng dữ liệu Hàm tác động trên nhóm các dòng dữ liệu: Giá trị trả vê tương ứng với các phép thao tác trên nhóm dữ liệu trả về Trang 23 Thuvientailieu.net.vn Oracle cơ bản - SQL và PL /SQL Hình vẽ 6 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 trên kiểu dữ liệu số Đầu vào và đầu ra là các giá trị kiểu số Một số hàm SQL hay dùng Hàm SQL Diễn... giải Môi trường Tác động và gây ảnh hưởng tới môi trường làm việc của SQL* Plus trong phiên làm việc hiện tại Định dạng dữ liệu Định dạng lại dữ liệu trả về từ server Thao tác file Lưu giữ, nạp và chạy các file scrips Thực hiện lệnh Gửi các lệnh SQL có trong bộ đệm lên server Soạn thảo Sửa đổi lại lệnh SQL có trong bộ đệm Trang 12 Thuvientailieu.net.vn Oracle cơ bản - SQL và PL /SQL Tương tác Cho phép... LOWER( SQL COURSE’) FROM DEPT; LOWER(DNAME) LOWER( 'SQL accounting research sales operations sql sql sql sql course course course course Ví dụ hàm UPPER(char) SELECT ENAME FROM EMP WHERE ENAME = UPPER(‘Smith’); ENAME SMITH Ví dụ hàm INITCAP(char) SELECT INITCAP(DNAME), INITCAP(LOC) FROM INITCAP(DNAME) INITCAP(LOC) Thuvientailieu.net.vn DEPT; Trang 27 Thuvientailieu.net.vn Oracle cơ bản - SQL và PL /SQL. .. DEPT 20 SINCE 12-01-1983 MILLER HAS HELP THE POSITION OF CLERK IN DEPT 10 SINCE 23-01-1982 14 rows selected 6 Hiển thị cấu trúc bảng emp; 7 Thay đổi nhãn và định dạng hiển thị của cột sal và hiredate trong bảng emp; Trang 16 Thuvientailieu.net.vn Oracle cơ bản - SQL và PL /SQL Chương 3 TRUY VẤN DỮ LIỆU CÓ ĐIỀU KIỆN 3.1.CÁC GIỚI HẠN TRONG TRUY VẤN DỮ LIỆU Trong phần lớn các trường hợp lấy dữ liệu từ... thì giữ lại n Trang 26 Thuvientailieu.net.vn Oracle cơ bản - SQL và PL /SQL 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_string[,replacem ent_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... BUFF[ER] Xoá tất cả các dòng trong SQL buffer DEL Xoá dòng hiện tại DEL n Xoá dòng n DEL m n Xoá dòng từ m đến n I[NPUT] Thêm một số dòng nhất định I[NPUT] text Thêm dòng có chứa text L[IST] Liệt kê toàn bộ các dòng trong SQL buffer Trang 13 Thuvientailieu.net.vn Oracle cơ bản - SQL và PL /SQL L[IST] n Liệt kê dòng n L[IST] m n Liệt kê dòng m đến n R[UN] Hiển thị và chạy lệnh trong buffer N Nhày đến... vào bộ nhớ đệm trên một hoặc nhiều dòng SQL* Plus thao tác với dữ liệu trong database Câu lệnh được tải trực tiếp không thông qua bộ đệm Câu lệnh có thể viết tắt Có sử dụng ký tự kết thúc lệnh khi thực hiện Không đòi hỏi phải có ký tự kết thúc lệnh Sử dụng các hàm trong việc định dạng dữ liệu Sử dụng các lệnh định dạng dữ liệu của chính SQL* Plus 2.2.2 Phân nhóm câu lệnh trong SQL* Plus Các lệnh SQL* Plus

Ngày đăng: 15/08/2016, 05:45

Xem thêm: BÀI GIẢNG ORACLE cơ bản SQL và PL SQL

TỪ KHÓA LIÊN QUAN

w