Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 104 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
104
Dung lượng
1,64 MB
Nội dung
SQL PL/SQL C b n Oracle - SQL PL/SQL M CL C M C L C .1 CH .5 NG GI I THI U CHUNG 1.1 NGÔN NG SQL 1.1.1 L ch s phát tri n c a 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 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 c b n 1.3 C S D LI U TH C HÀNH 1.3.1 Mơ hình d li u 1.3.2 C u trúc b ng d li u CH LI U NG L NH TRUY V N C B N 5 5 6 7 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 c b n 2.1.3 Các thƠnh ph n khác c a m nh đ SELECT 2.1.4 Phơn bi t giá tr d li u tr v 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 c a 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 c b n 2.3 BÀI T P 9 9 10 11 11 11 12 13 15 CH 17 NG 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 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 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 d li u tr v 3.3 BÀI T P 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 d li u s 4.2.2 Các hƠm thao tác ki u d li u kỦ t 4.2.3 Các hàm thao tác ki u d 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 .17 17 18 19 20 20 20 21 .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 t ng dòng d li u 4.5.2 HƠm nhóm d li u CH NG L NH TRUY V N D 36 36 39 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 c a b ng v i (t thơn) 5.1.5 Cách bi u di n k t n i m 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 cơy table 5.3.2 Kỹ thu t th c hi n 5.3.3 M nh đ WHERE c u trúc hình cơy 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 d li u c b n 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 vƠ 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 d li u c a table 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 7.7 BÀI T P CH ĐI N D NG CÁC L NH THAO TÁC D LI U .62 63 LI U 64 8.1 THAO TÁC D LI U TRONG TABLE 8.1.1 Thêm m i dòng d li u 8.1.2 C p nh t dòng d li u 8.1.3 L nh Merge 8.1.4 Xóa dịng d li u 8.1.5 L i rƠng bu c d li u 8.2 L NH ĐI U KHI N GIAO D CH 8.3 BÀI T P CH 64 64 65 65 66 66 66 67 NG SEQUENCE VÀ INDEX .68 9.1 SEQUENCE 9.1.1 T o Sequence 9.1.2 Thay đ i vƠ 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 .68 68 69 69 69 69 70 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 73 NG 11 QUY N VÀ B O M T 11.1 QUY N - PRIVILEGE 11.2 ROLE 11.3 SYNONYM CH NG 12 GI I THI U NGÔN NG 73 74 74 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ô 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 d li u Table 12.4.2 Ki u d li u Record 12.4.3 Sao ki u d li u m t dòng 12.4.4 Sao ki u d li u c a m t 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 84 NG 13 GI I THI U PROCEDURE BUILDER 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 đ i v 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 m t th t c 14.2 HÀM 14.2.1 T o hƠm 14.2.2 Th c hi n m t hƠm 14.2.3 L i ích c a 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 vƠ th t c 14.3 PACKAGE 14.3.1 C u trúc c a package 14.3.2 T o package 14.3.3 Huỷ package 14.3.4 L i ích c a vi c s d ng package 14.3.5 M t s package chuẩn c a 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 c a 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 c a ngôn ng SQL Mô hình c s d 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 nh t Mơ hình quan h g m thƠnh ph n sau: T p h p đ i t ng vƠ / m i quan h T p h p x lỦ tác đ ng t i quan h RƠng bu c d li u đ m b o tính xác vƠ nh t quán SQL (Structured Query Language, đọc lƠ "sequel") lƠ t p l nh truy xu t CSDL quan h Ngôn ng SQL đ c IBM s d ng đ u tiên h qu n tr CSDL System R vƠo gi a nh ng năm 70 H ngôn ng SQL đ u tiên (SEQUEL2) đ c 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 đ u tiên c a SQL SQL đ c cƠi đặt h qu n tr CSDL nh DB2 c a IBM vƠ SQL/DS Ngày nay, SQL đ c s d ng r ng rƣi vƠ đu c xem lƠ 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 lƠ ngôn ng chuẩn đ truy c p CSDL quan h văn b 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 b n ISO 9075-1989 T t c h qu n tr CSDL l n th gi i cho phép truy c p SQL vƠ 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 c b n nh t CSDL quan h (RDBMS), bao g m nhi u columns (c t d li u) v i nhi u rows (dòng d li u) Row T h p nh ng giá tr c a Column b ng M t row đ lƠ record (b n ghi) Column Quy đ nh m t lo i d li u b ng Ví d : lo i d li u tên phịng ban có b ng phịng ban Ta th hi n th column nƠy thông qua tên column vƠ có th kèm theo m t vƠi thông tin khác v column nh ki u d li u, đ dƠi c a d li u Field Giao c a column vƠ row Field lƠ n i ch a d li u N u khơng có d li u field ta nói field có gia tr lƠ NULL Primary Key LƠ m t column m t t p column xác đ nh tính nh t c a rows b ng Ví d DEPTNO lƠ Primary Key c a b ng DEPT đ c dùng đ xác đ nh nh t m t phòng ban b ng DEPT mƠ đ i di n lƠ m t row d li u c gọi Trang Oracle - SQL PL/SQL Primary Key nh t thi t ph i có s li u Foreign Key LƠ m t column m t t p columns có tham chi u t i b ng m t b ng khác Foreign Key xác đ nh m i quan h gi a b ng Constraints LƠ rƠng bu c đ i v i d 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 7521 WARD 30 7566 JONES 7654 EMP DEPT DEPTNO DEPTNO DNAME 10 ACCOUNTING 20 RESEARCH 20 30 SALES MARTIN 30 40 OPERATIONS 7698 BLAKE 30 7782 CLARK 10 Foreign key Primary key Column Hình v Minh ho thƠnh ph n logic database 1.2.2 Các đ i t ng database Đ it ng Di n gi i Table C u trúc l u tr c b n nh t CSDL quan h (RDBMS), g m row column View LƠ c u trúc logic hi n th d 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 Program unit T p h p cơu l nh th c hi n đ c vi t b i ngôn ng SQL vƠ PL/SQL, bao g m Procedure, function, package ng đ ng c a đ i t ng 1.2.3 Các nhóm l nh SQL c b n Tên l nh Di n gi i SELECT LƠ l nh thông d ng nh t, dùng đ l y, xem d li u CSDL INSERT UPDATE DELETE LƠ l nh dùng đ nh p thêm nh ng row m i, thay đ i n i dung d li u row hay xoá row table Nh ng l nh nƠy đ c gọi lƠ l nh thao tác d li u DML (Data Manipulation Language) Trang Oracle - SQL PL/SQL LƠ l nh dùng đ thi t l p, thay đ i hay xoá b c u trúc d li u nh lƠ table, view, index Nh ng l nh nƠy đ c gọi lƠ l nh đ nh nghĩa d li u DDL (Data Definition Language) CREATE ALTER DROP RENAME TRUNCATE COMMIT ROLLBACK SAVE POINT Qu n lỦ vi c thay đ i d li u l nh DML Vi c thay đ i d li u có th đ c nhóm l i thƠnh transaction l nh nƠy dùng đ gán huỷ quy n truy nh p vƠo CSDL Oracle vƠ c u trúc bên Nh ng l nh nƠy đ c gọi lƠ l nh u n d 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 d li u DEPT EMP SALGRADE BONUS DUMMY Hình v Mơ hình d li u th c hƠnh 1.3.2 C u trúc b ng d li u B ng DEPT Tên c t Ki u Đi u ki n PRIMARY KEY Di n gi i DEPTNO NUMBER(2) DNAME VARCHAR2(14) Tên phòng ban LOC VARCHAR2(13) Đ a ch Mã phòng ban B ng SALGRADE Tên c t Ki u Đi u ki n PRIMARY KEY Di n gi i M cl ng GRADE NUMBER LOSAL NUMBER Giá tr th p nh t HISAL NUMBER Giá tr cao nh t Trang Oracle - SQL PL/SQL B ng EMP Tên c t Di n gi i Ki u Đi u ki n EMPNO NUMBER(4) PRIMARY KEY ENAME VARCHAR2(10) Tên nhân viên JOB VARCHAR2 (9) Ngh nghi p MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) NOT NULL, FOREIGN KEY (EMP.EMPNO) Mã nhân viên Mƣ ng NgƠy gia nh p công ty L Th FOREIGN KEY (DEPT.DEPTNO) i qu n lỦ ng ng 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 TRUẤ V N 2.1.1 Quy t c vi t l nh Các cơu l nh truy v n đ c 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 a m t cơu l nh SQL có th đ c tr i dƠi nhi u dịng Các t khố không đ c phép vi t t t hay phơn cách nhi u dịng Các m nh đ thơng th ng đ c đặt nhi u dòng khác Đ rõ rƠng vi c th hi n cơu l nh, ta nên s d ng d u TAB vi t l nh Ta có th 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 b i d u ch m phẩy (;) 2.1.2 Cơu l nh truy v n c b 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 c a l nh truy v n g m có hai ph n: M nh đ chọn l a bao g m L nh SELECT vƠ tên c t d M nh đ bi u di n n i ch a bao g m FROM vƠ tên b ng li u tr v 2.1.3 Các thƠnh ph n khác c a m nh đ SELECT Trong m nh đ SELECT cịn có th đ a vƠo thƠnh ph n khác: Bi u th c toán học Column alias Các column đ c 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 có th giá tr (column hƠng s ), toán t , hƠm Các toán t đ c dùng lƠ (+), (-), (*), (/) Đ u tiên c a toá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 có th d dƠng t o script ch a th t c c n thi t t o m i m t database M t cách khác, ta có th t o m i hay s a đ i th t c thông qua công c c a Oracle Trong ch đƣ bi t cách s d ng Procedure Builder đ t o m i th t c ng tr c, ta 14.1.2 Huỷ b th t c T ng t nh vi c t o th t c, ta có th 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 m t th t c M t th t c Oracle đ c th c hi n theo hai b c sau: N i dung c a th t c đ c thi t l p vƠ l u gi database d i d ng văn b n (text) ToƠn b n i dung c a th t c đ c biên d ch d ng mƣ p-code, ti n cho viêc th c hi n th t c Hình v 13 Các b c th c hi n m t th t c 14.2.HÀM T ng t nh th t c, hƠm (function) lƠ nhóm l nh PL/SQL th c hi n ch c nƠo Khác v i th t c, hƠm s tr v m t giá tr t i l i gọi c a Trang 89 Oracle - SQL PL/SQL HƠm có th đ c l u gi database d i d ng Store procedure 14.2.1 T o hƠm Ta có th 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 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 datatype PL/SQL Block 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 hi n m t hƠm Quá trình l u gi vƠ biên d ch m t hƠm t ng t nh đ i v i m t th t c Quá trình gọi vƠ th c hi n m t hƠm đ c: c di n theo ba b Vi c gọi hƠm đ c th c hi n tên hƠm bi u th c đ c tham chi u t i M t bi n host (host variable) đ c t đ ng t o đ l u gi giá tr tr v c a hƠm Th c hi n 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 c a vi c s d ng hƠm V i vi c s d ng hƠm, m t s tr ng h p ta có th th y đ c l i m nh sau: Cho phép th c hi n 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 a cơu l nh SQL mƠ n u không s d ng hƠm ta s không th nƠo th c hi n đ c Tăng tính đ c l p c a d li u vi c phơn tích vƠ x lỦ d li u đ c th c hi n Server thay tr v d li u tr c ti p cho ng d ng d i Client đ chúng ti p t c x lỦ Tăng tính hi u qu c a cơu l nh truy v n vi c gọi hƠm cơu l nh SQL Ta có th s d ng hƠm đ thao tác ki u d li u t t o Cho phép th c hi n đ 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 đ c l u database m i có th s d ng đ c cho cơu l nh SQL Các hƠm ng i dùng đ nh nghĩa ch đ c áp d ng cho u ki n th c hi n dòng d li u (m nh đ WHERE), không th áp d ng cho u ki n th c hi n nhóm (m nh đ GROUP) Tham s s d ng hƠm ch có th lƠ lo i IN, không ch p nh n giá tr OUT hay giá tr IN OUT Ki u d li u tr v c a hƠm ph i lƠ ki u d li u DATE, NUMBER, NUMBER Không cho phép hƠm tr v ki u d li u nh BOOLEAN, RECORD, TABLE Ki u d li u tr v nƠy ph i t ng thích v i ki u d li u bên Oracle Server 14.2.5 Huỷ b hƠm T ng t nh vi c t o hƠm, ta có th 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 vƠ th t c Ta t o th t c đ l u gi m t lo t các cơu l nh ph c v cho nhi u l n gọi khác Th t c có th khơng có, có m t nhi u tham s Tuy nhiên th t c không tr l i b t kỳ m t k t qu nƠo HƠm gi ng nh th t c, bao g m m t lo t cơu l nh, có th khơng có, có m t nhi u tham s Tuy nhiên khác v i th t c, hƠm bao gi tr v m t k t qu 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 hi n s d dƠng vƠ sáng s a h n So sánh gi a hƠm vƠ th t c Th t c Hàm Th c hi n gi ng nh th c hi n cơu l nh PL/SQL Có th đ c gọi gi ng nh m t ph n c a bi u th c Khơng có ki u giá tr tr v Có ch a giá tr tr v Có th tr v m t nhi u giá tr (thông qua tham s OUT) Tr v m t giá tr L i ích c a 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 b i 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 hi n database, t đó, lƠm gi m l u l ng truy n thông m ng Nơng cao kh b o trì: Ta có th 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 c a chúng (các tham s vƠ l i gọi v n y nguyên) Thay đ i n i dung c a m t hƠm, hay th t c có th ng d ng đ c cho nhi u user khác Tăng tính b o m t vƠ toƠn vẹn c a d li u: V i vi c u n truy nh p d li u dán ti p đ i v i đ i t ng database s lƠm nơng cao tính b o m t c a d li u Quan h gi a cơu l nh hƠm, th t c đ c đ m b o 14.3.PACKAGE Package lƠ m t t p h p ki u d li u, bi n l u gi giá tr vƠ th t c, hƠm có m t m i liên h v i nhau, đ c g p chung l i Đặc m n i b t nh t c a package lƠ m t ph n t package đ c gọi toƠn b n i dung c a package s đ c n p vƠo h th ng Do đó, vi c gọi t i ph n t khác package sau nƠy s không ph i m t th i gian n p vƠo h th ng n a T đó, nơng cao t c đ th c hi n l nh c a toƠn b hƠm, th t c có package 14.3.1 C u trúc c a package M t package đ c c u trúc lƠm hai ph n Ph n mô t (specification) đ nh nghĩa giao ti p có th có c a package v i bên ngoƠi Ph n thơn (body) lƠ 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 c a package bao g m 05 thƠnh ph n: Public variable (bi n công c ng): lƠ bi n mƠ ng d ng bên ngoƠi có th tham chi u t i đ c Public procedure (th t c công c ng): bao g m hƠm, th t c c a package có th tri u gọi t ng d ng bên ngoƠi Private procedure (th t c riêng ph n): lƠ hƠm, th t c có package vƠ ch có th đ c tri u gọi b i hƠm hay th t c khác package mà Global variable (bi n t ng th ): lƠ bi n đ c khai báo dùng toƠn b package, ng d ng bên ngoƠi tham chi u đ c t i bi n nƠy Private variable (bi n riêng ph n): lƠ bi n đ c khai báo m t hƠm, th t c thu c package Nó ch có th đ c tham chi u đ n b n thơn hƠm hay th t c 14.3.2 T o package Ta có th 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: 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 package_name type and item declarations subprogram specifications 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 IS BODY comm_package 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 nh vi c t o package, ta có th 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 c a vi c s d ng package Tăng tính phơn nh thƠnh ph n (Modularity) Ta có th đóng gói thƠnh ph n, c u trúc có quan h logic v i m t module ng v i m t package Vi c k th a gi a package r t đ n gi n, vƠ đ c th c hi n m t cách sáng Đ n gi n vi c thi t k ng d ng T t c thông tin c n thi t cho vi c giao ti p đ u đ c đặt ph n đặc t c a package (package specification) N i dung ph n nƠy có th đ c so n th o vƠ biên d ch đ c l p v i ph n thơn c a package (package body) Do đó, hƠm hay th t c có gọi t i thƠnh ph n c a package có th đ c biên d ch t t Ph n thơn c a package có th đ c ti p t c phát tri n cho đ 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 i d ng public (công c ng) hay private (riêng t ) Tuỳ theo yêu c u thi t k , ta có th cho phép truy nh p hay ẩn d u thơng tin T đó, có th b o v đ c tính toƠn vẹn d li u Nơng cao hi u su t s d ng Ngay gọi m t hƠm hay th t c b t kỳ package l n đ u tiên ToƠn b n i dung c a package s đ c n p vƠo b nh Do v y, hƠm vƠ th t c package gọi đ n sau nƠy có th th c hi n mƠ không c n ph i n p l i vƠo b nh Vi c nƠy 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 hi n t i (overloading) Package cho phép th c hi n t i đ i v i hƠm vƠ th t c Theo đó, hƠm vƠ th t c khác có th đ c phép đặt trùng tên Vi c nƠy s nơng cao tính m m dẻo c a vi c s d ng hƠm, th t c package 14.3.5 M t s package chuẩn c a Oracle Th t c Hàm DBMS_ALERT Cung c p s ki n v thông p c a database DBMS_APPLICATION_INFO Thông tin v ho t đ ng hi n th i đ i v 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 v di n gi i cho tham s c a th t c, hƠm DBMS_JOB Lên k ho ch th c hi n đ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, u ch nh tr ng thái khoá (lock) đ i v i t ng đ 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 v t hƠm, th t c, trigger, DBMS_PIPE Cho phép x lỦ g i đ ng th i thông 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 DBMS_SQL Cho phép s d ng l nh SQL đ ng đ truy xu t database DBMS_TRANSACTION Đi u n giao d ch, c i thi n vƠ nơng cao hi u qu đ i v i giao d ch nh vƠ không phơn tán DBMS_UTILITY Phơn tích đ i t UTL_FILE Cho phép truy xu t t i file v i cơu l nh PL/SQL ng vùng nh chia sẻ ng t ng schema Trang 96 Oracle - SQL PL/SQL Ch ng 15 DATABASE TRIGGER Database trigger lƠ nh ng th t c đ c th c hi n ng m đ nh th c hi n l nh SQL nh INSERT, DELETE, UPDATE nhằm đ m b o quy t c logic ph c t p c a d 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 hi n t t c thao tác có liên quan t i l nh can thi p d li u đ c th c hi n Ch s d ng database trigger đ i v i thao tác trọng tơm Không s d ng database trigger đ th c hi n rƠng bu c sẵn có database Oracle Ví d : dùng database trigger đ thay th cho constrain S d ng database trigger có th gơy r i, khó khăn cho vi c b o trì vƠ phát tri n h th ng l n Vì th , ta ch 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 m t s Th i gian th c hi n: BEFORE, AFTER tiêu chí nh : HƠnh đ ng th c hi n: INSERT, UPDATE, DELETE Đ i t ng tác đ ng: b ng d li u Lo i trigger th c hi n: dòng l nh hay cơu l nh M nh đ u ki n th c hi n N i dung c a trigger 15.1.1 Phơn lo i trigger Ta có th phơn lo i trigger theo th i gian th c hi n nh : BEFORE AFTER BEFORE trigger: Trigger đ c kích ho t tr c th c hi n cơu l nh Vi c nƠy có th cho phép ta lo i b t phép x lỦ không c n thi t, th m chí có th rollback d li u tr ng h p có th gơy ngo i l (exception) Trigger thu c lo i nƠy th ng đ c s d ng đ i v i thao tác INSERT UPDATE AFTER trigger: Cơu l nh đ c th c hi n xong trigger m i đ c kích ho t Th c hi n công vi c th ng ph i lƠm sau đƣ th c hi n cơu l nh INSTEAD OF trigger: Lo i trigger nƠy cho phép ng i s d ng có th thay đ i m t cách su t d li u c a m t s view mƠ không th th c hi n thay đ i tr c ti p đ c V i INSTEAD OF trigger, ta có th th c hi n v i c ba thao tác: insert, update, delete Ta có th phơn lo i trigger theo lo i cơu l nh kích ho t nh : INSERT, UPDATE, DELETE Trong trigger thu c m t ba lo i l nh: INSERT, UPDATE,DELETE Trigger UPDATE c n ph i ch rõ thêm tên c t d li u kích ho t trigger m i giá tr d li u b thay đ i Bên Trigger có th có ch a l nh thao tác d 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 có th phơn lo i trigger theo s l n kích ho t theo s có 02 lo i trigger: Trigger m c l nh: Trigger đ c kích ho t m i th c hi n cơu l nh Trigger m c dịng l nh: Trigger đ c kích nhi u l n ng v i m i dòng d li u ch u nh h ng b i thao tác th c hi n lênh Trang 97 Oracle - SQL PL/SQL Hình v 15 Th t th c hi n trigger 15.1.2 L nh t o trigger Ta có th 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 d 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 có th t o database trigger thông qua công c Procedure builder c a Oracle Ta l n l th c hi n theo b t 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 r i b m nút New đ t o m i trigger Đặt tuỳ chọn v th i gian, ki u, cho trigger So n th o n i dung c a 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 d li u 15.2.QU N LÝ TRIGGER 15.2.1 Phơn bi t database trigger Trigger vƠ th t c Th t c Trigger L nh t o CREATE TRIGGER L u gi T n d li u d mƣ ngu n vƠ d ng p-code Đ c gọi ng m đ nh Không cho phép dùng: COMMIT, ROLLBACK, SAVEPOINT L nh t o CREATE PROCEDURE i d ng L u gi T n d li u d mƣ ngu n vƠ d ng p-code Th c hi n theo l i gọi t i d ng ng minh Cho phép dùng: COMMIT, ROLLBACK, SAVEPOINT Trang 100 Oracle - SQL PL/SQL Database Trigger Form Trigger Form Trigger Database Trigger Đ c th c hi n ch b i tác đ ng ng d ng Đ c th c hi n có tác đ ng lên database ng d ng cơng c c a Oracle Đ c kích ho t b i l nh SQL Đ c kích b i s ki n ng d ng Không Phơn bi t hai lo i trigger cơu l nh vƠ dòng d li u phơn bi t Tuỳ theo l i x y ra, trigger có th rollback cơu l nh Tuỳ theo l i x y ra, có th rollback toƠn b giao d ch Database Trigger đ gơy c kích ho t đ c l p v i Form Trigger 15.2.2 Thay đ i tr ng thái c a database trigger Cho phép/ khơng cho phép kích ho t m 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 c databse trigger c a m t 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 d li u nh d đ nh Ki m tra th c hi n trigger theo nh m nh đ When Ki m tra nh h ng c a trigger đ i v i trigger khác Ki m tra nh h ng c a trigger khác đ i v i trigger xem xét Th t th c hi n trigger vƠ ki m tra rƠng bu c: Th c hi n trigger BEFORE STATMENT Lặp nhi u dòng d li u a Th c hi n trigger BEFORE ROW b Th c hi n cơu l nh thao tác d li u vƠ ki m tra toƠn vẹn d li u dòng d li u xem xét c Th c hi n trigger AFTER ROW Th c hi n phép ki m tra rƠng bu c Th c hi n trigger AFTER STATMENT Các quy t c rƠng bu c đ i v i trigger: Không đ c phép s a đ i d li u c t d li u có rƠng bu c thu c lo i khố (primary key), khố ngoƠi (foreign key) hay nh t Khơng cho phép đọc d 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 d li u th c hƠnh Hình v Cơu l nh c a SQL*Plus Hình v H n ch d li u tr v 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 c a 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 t i Client Hình v 11 T o hƠm, th t c t i Server Hình v 12 Màn hình PL/SQL Interpreter Hình v 13 Các b c th c hi n m t th t c Hình v 14 C u trúc package Hình v 15 Th t th c hi n trigger Hình v 16 T o trigger cơng c Procedure Builder Hình v 17 Trigger tác đ ng dòng d li u .6 12 17 23 24 84 85 86 86 87 87 89 93 98 100 100 Trang 103 ... 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 qua c? ?u l nh SQL v? ? PL /SQL Theo ng i s d ng c? ? th ? ?C? ?u l nh SQL. .. Hình v C? ?u l nh c a SQL* Plus Kh? ?c bi t gi a l nh SQL v? ? SQL* Plus SQL* Plus SQL Nh n d ng l nh SQL v? ? g i l nh lên Server LƠ ngôn ng đ giao ti p v i Oracle Server vi c truy xu t d li u Tuỳ thu c v? ?o... selected Trang 10 Oracle - SQL PL /SQL 2.1.5 Giá tr NULL C t c? ? giá tr r ng (NULL) lƠ c t ch a đ c gán giá tr , nói c? ?ch kh? ?c ch a đ c kh i t o giá tr C? ?c c t v i b t c ki u d li u nƠo c? ? th c? ?