Đào tạo Oracle cơ bản - Giáo trình SQL và PL SQL
Mục lục
Mục lục .3
1 Giới thiệu.6
1.1 Mục tiêu khoá học .6
1.2 Khởi động và thoát khỏi Oracle.6
1.2.1 Tại Server (Window NT) .6
1.2.2 Tại Client (Window 9x) .6
1.3 Giới thiệu ngôn ngữ SQL .7
1.3.1 Lịch sử phát triển của ngôn ngữ SQL .7
1.3.2 Chuẩn SQL .7
1.4 Các khái niệm trong CSDL.7
1.5 Danh sách rút gọn các đối t-ợng CSDL .8
1.6 Các lệnh SQL .8
1.7 Giới thiệu về ví dụ thực hành.9
1.7.1 Mô hình quan hệ dữ liệu.9
1.7.2 Mô tả dữ liệu.9
2 Lệnh truy vấn cơ bản .10
2.1 Lệnh truy vấn cơ bản.10
2.2 Các thành phần khác của mệnh đề SELECT.10
2.3 Giá trị Null.11
2.4 Lọc dữ liệu từ các row có cùng giá trị.11
2.5 Hiển thị cấu trúc bảng .12
2.6 Các lệnh của công cụ SQL*Plus.12
2.6.1 Các lệnh soạn thảo .12
2.6.2 Các lệnh về file.13
2.6.3 Các lệnh về column.13
2.7 Bài tập.14
3 Truy vấn dữ liệu có điều kiện .16
3.1 Mệnh đề ORDER BY .16
3.2 Mệnh đề WHERE.16
3.3 Các toán tử .17
3.4 Bài tập.19
4 Các hàm áp dụng cho 1 dòng dữ liệu.20
4.1 Các hàm số.20
4.2 Các hàm ký tự .22
4.3 Các hàm ngày .26
4.4 Các hàm chuyển đổi kiểu.28
4.5 Bài tập.29
5 Biến runtime.31
5.1 Bài tập.32
6 Các hàm nhóm áp dụng cho lớn hơn hoặc bằng 1 dòng dữ liệu .32
6.1 Các hàm tác động trên nhóm .32
6.2 Mệnh đề GROUP BY .34
6.3 Bài tập.35
7 Hiển thị nội dung dữ liệu từ nhiều bảng .35
7.1 Mối liên kết t-ơng đ-ơng .35
Công ty cổ phần đầu t- phát triển công nghệ - FPT
Giáo trình SQL và PL/SQL
Đào tạo cơ bản: SQL và PL/SQL Trang 4
7.2 Mối liên kết không t-ơng đ-ơng.35
7.3 Mối liên kết cộng.36
7.4 Liên kết của bảng với chính nó .36
7.5 Các toán tử tập hợp .36
7.6 Bài tập.37
8 Các lệnh truy vấn lồng nhau.39
8.1 Câu lệnh SELECT lồng nhau. .39
8.2 Bài tập.40
9 Cấu trúc hình cây.40
9.1 Cấu trúc hình cây trong 1 table .40
9.2 Kỹ thuật thực hiện .41
9.3 Bài tập.42
10 Tổng kết về lệnh select .44
11 Tạo table .44
11.1 Lệnh tạo bảng .44
11.2 Các quy tắc đặt tên object .46
11.3 Các quy tắc khi tham chiếu đến object.47
11.4 Kiểu dữ liệu và điều kiện.47
11.4.1 CHAR .47
11.4.2 VARCHAR2.48
11.4.3 VARCHAR.48
11.4.4 NUMBER.48
11.4.5 FLOAT.48
11.4.6 LONG .49
11.4.7 DATE.49
11.4.8 RAW và LONG RAW .50
11.4.9 ROWID.50
11.4.10 MLSLABEL.50
11.4.11 Chuyển đổi kiểu .50
11.5 Constraint.51
11.6 Bài tập.52
12 các lệnh DDL khác và dữ liệu trong từ điển dữ liệu.52
12.1 Chỉnh sửa cấu trúc table .52
12.2 Các lệnh DDL khác .53
12.2.1 Xóa table .53
12.2.2 Giải thích bảng .53
12.2.3 Thay đổi tên object.53
12.2.4 Xóa dữ liệu của table.53
12.3 Dữ liệu trong từ điển dữ liệu .54
12.4 Bài tập.54
13 Các lệnh Thao tác dữ liệu khác .55
13.1 Chèn một row vào table .55
13.2 Chỉnh sửa dữ liệu.55
13.3 Xóa dòng .55
13.4 Lỗi ràng buộc dữ liệu .56
13.5 Lệnh điều khiển giao dịch.56
13.6 Bài tập.57
14 Sequence và index.57
Công ty cổ phần đầu t- phát triển công nghệ - FPT
Giáo trình SQL và PL/SQL
Đào tạo cơ bản: SQL và PL/SQL Trang 5
14.1 Sequence.57
14.1.1 Tạo Sequence.57
14.1.2 Xoá và sửa sequence .58
14.2 Index .58
14.3 Bài tập.59
15 Tạo view .59
15.1 View.59
15.2 Bài tập.61
16 Quyền và bảo mật .61
16.1 Quyền - PRIVILEGE .61
16.2 ROLE.62
16.3 Synonym.63
17 tổng quan về pl/sql và procedure builder.63
17.1 Cú pháp lệnh PL/SQL .63
17.2 PL/SQL block .63
17.3 Giới thiệu Procedure builder.64
18 cú pháp lập trình .66
18.1 IF .66
18.2 LOOP và EXIT.66
18.3 FOR .67
18.4 WHILE .67
18.5 GOTO .67
19 cursor .68
19.1 Định nghĩa .68
19.2 Kiểu dữ liệu Table và Record.69
19.3 Sao kiểu dữ liệu .70
19.4 Câu lệnh SELECT. INTO. trong PL/SQL.70
19.5 Bài tập.70
20 procedure và funtion.71
20.1 Procedure .71
20.2 Function.72
20.3 Bài tập.73
21 pakage.73
21.1 Package .73
22 database trigger .74
22.1 Database Trigger.74
22.2 Bài tập.75
23 error handing .76
23.1 Bài tập.78
này vào bảng message cột charcol1 (thử với các giá trị 7654, 7369, 7900, 7876) 4. Đ−a vào vòng lặp v từ 1 đến 10 lệnh UPDATE messages SET numcol2=100 WHERE numcol1 = v; nếu bất kỳ một lần update nào đó có số l−ợng row >1 thì exit khỏi vòng lặp. 20 procedure và funtion 20.1 Procedure Là một nhóm các lệnh thực hiện chức năng nào đó nhằm tăng khả năng xử lý, khả năng sử dụng các thủ tục chung, tăng tính bảo mật và an toàn dữ liệu, tiện ích trong phát triển. Cú pháp: Procedure : Là tên của procedure đ−ợc tạo. Argument : Gồm tên của danh sách các biến và kiểu của nó. IN : Chỉ định rằng bạn phải đ−a trị khi gọi procedure. OUT : Chỉ ra rằng Procedure sẽ trả lại trị cho biến tới môi tr−ờng gọi nó. IN OUT : Chỉ ra rằng bạn phải gán trị cho argument khi gọi procedure và procedure sẽ trả lại trị argument tới môi tr−ờng gọi. Nếu không ghi IN, OUT hoặc IN OUT thì ngầm định sẽ là IN Công ty cổ phần đầu t− phát triển công nghệ - FPT Giáo trình SQL và PL/SQL Đào tạo cơ bản: SQL và PL/SQL Trang 72 Datatype : Là kiểu của argument, ở đây chỉ đ−ợc khai báo kiểu mà kgông đ−ợc khai báo các chiều dài argument. Ví dụ không đ−ợc khai báo argument là VARCHAR2(10) mà phải khai báo là VARCHAR2. Pl/sql_subprogram_body: Là phần thân của procedure đ−ợc viết bằng PL/SQL. Ví dụ: CREATE OR REPLACE PROCEDURE INS_DEPT(X NUMBER, Y VARCHAR2) IS BEGIN INSERT INTO DEPT(DEPTNO,DNAME) VALUES (X,Y); END; Muốn thực hiện procedure tại SQL plus thự hiện dùng lệnh execute <ten(danh sách giá trị). Còn trong các thủ tục khác dùng lệnh gọi bình th−ờng SQL> execute ins_dept(55,’ New Name’); 20.2 Function Cú pháp: Các tham giống nh− procedure nh−ng khác là sau khi gọi hàm trả lại trị Ví dụ: create or replace function get_dname( y number) return varchar2 is m char(14); begin select dname into m from dept where deptno=y; if SQL%notfound then m:='Khong thay'; end if; return(rtrim(m)); end; Để gọi hàm get_dname ta gọi trực tiếp hoặc thông qua các phép gán. Ví dụ: SQL> select * from dept where dname=get_dname(10); DEPTNO DNAME LOC --------- -------------- ------------- 10 ACCOUNTING NEW YORK SQL> select get_dname(20) from dual; GET_DNAME(20) -------------------------------------------------------- Công ty cổ phần đầu t− phát triển công nghệ - FPT Giáo trình SQL và PL/SQL Đào tạo cơ bản: SQL và PL/SQL Trang 73 RESEARCH 20.3 Bài tập 1. Viết hàm lấy tên giám đốc theo biến empno đ−ợc nhập vào, 2. Viết thủ tục nhập thông tin vào bảng message các tr−ờng numcol1: Mã phòng charcol1: tên phòng ban numcol2: tổng l−ơng của phòng 3. Viết thủ tục dùng cursor; lấy số liệu về n ng−ời (n là một biến đ−ợc đ−a vào từ man hình) có mức l−ơng cao nhất trong bảng emp đ−a vào bảng top_sal với các giá trị t−ơng ứng trong num=empno, name = ename, salary = sal). Bảng top_sal có cấu trúc nh− sau: NUM NUMBER(4) NAME VARCHAR2(25) SALARY NUMBER(11,2) 21 pakage 21.1 Package Là tập hợp của các đối t−ợng gồm các procedure, function, variable, constant, cursor và các exception. Việc tạo các package cho phép tăng khả năng mềm dẻo, tăng tính bảo mật, tạo sự thuận lợi trong việc quản lý hệ thống đồng thời tăng hiệu suất xử lý của hệ thống. Để tạo package thực hiện nh− sau: Để tạo package body thực hiện nh− sau: Với các releases tr−ớc đây của PL/SQL việc gọi các functions chỉ có thể đ−ợc thực hiện bằng các lệnh của procedure, nh−ng giờ thì các lời gọi này có thể xuất hiện trong câu lệnh SQL giống nh− lệnh procedure. Điều này có nghĩa là ta có thể sử dụng các functions giống nh− các built-in SQL functions. Bằng các mở rộng SQL ta có thể tập hợp phân tích ngay bên trong Oracle Server mà ta không cần lấy dữ liệu vào trong ứng dụng điều này làm tăng tính độc lập của cơ sở dữ liệu. Tuy nhiên để có thể gọi đ−ợc từ SQL thì các function phải đảm bảo chắc chắn việc kiểm soát kết quả. Với các standalone functions thì Oracle có thể thực hiện điều này bằng việc kiểm tra function body. Tuy nhiên với body của package là ẩn cho nên các packaged functions ta phải sử dụng pragma RESTRICT_REFERENCES để đảm bảo luật này. Công ty cổ phần đầu t− phát triển công nghệ - FPT Giáo trình SQL và PL/SQL Đào tạo cơ bản: SQL và PL/SQL Trang 74 Pragma Restrict_references(, , ...) Trong đó: WNDS: Write no database state RNDS: Read no database state WNPS: Write no package state RNPS: Read no package state Ví dụ: create or replace package vidu is function get_dname( y number) return varchar2; Pragma Resctrict_references(get_dname, WNDS, WNPS); Procedure ins_dept (x number, y varchar2); end vidu; create or replace package body vidu is function get_dname( y number) return varchar2 is m char(14); begin select dname into m from dept where deptno=y; if SQL%notfound then m:='Khong thay'; end if; return(rtrim(m)); end; procedure ins_dept(x number, y varchar2) is begin insert into dept(deptno,dname) values (x,y); end; end vidu; Để gọi ta thực hiện nh− sau: SQL> execute vidu.ins_dept(70,'Vi du'); 22 database trigger 22.1 Database Trigger Một Database Trigger đ−ợc tạo và l−u trữ trong PL/SQL block t−ơng ứng với table. Nó đ−ợc tự động gọi đến khi có sự truy nhập đến table t−ơng ứng với các hành động định nghĩa. Để tạo một triger ta gõ theo có pháp sau: Công ty cổ phần đầu t− phát triển công nghệ - FPT Giáo trình SQL và PL/SQL Đào tạo cơ bản: SQL và PL/SQL Trang 75 Create or replace : lệnh tạo hoặc tạo lại trigger nếu nó đã tồn tại. Before : Chỉ ra rằng trigger sẽ đ−ợc thực hiện tr−ớc khi thực hiện lệnh. Affter : Chỉ ra rằng trigger sẽ đ−ợc thực hiện sau lệnh gọi tới nó. Delete, Insert, Update of on : trigger sẽ đ−ợc gọi khi có các hành động t−ơng ứng trên từng column của bảng. Referencing : Chỉ tên quan hệ tới các trị cũ (OLD) và mới (NEW) của row . For each row : Trigger thực hiện t−ơng ứng với mỗi row có điều kiện ứng với mệnh đề trong WHEN. Pl/sql_block : Là khối lệnh PL/SQL thực hiện các xử lý theo mong muốn. Ví dụ: create or replace trigger t_dname before insert or update of dname on dept for each row when (new.dname is null) begin if (:new.dname is null) then :new.dname:='No Name'; end if; end ; 22.2 Bài tập 1. Viết trigger để khi nhập số liệu vào bảng emp thì nó cũng nhập số liệu vào bảng emp1 với điều kiện cấu trúc bảng emp1 có empno, ename, job, dname 2. Thêm 1 cột vào bảng DEP tên là SUMSAL. Viết trigger để cột SUMSAL luôn chứa tổng l−ơng của phòng ban đó ( dữ liệu lấy t−ơng ứng từ bảng emp) 3. Lập 1 bảng tên là BACKUP có cấu trúc giống bảng EMP sao cho mỗi bản ghi trong emp bị xoá sẽ l−u sang backup 4. ứng với các theo tác insert, update, delete trên bảng emp, l−u lại các theo tác đó vào bảng message, với dữ liệu t−ơng ứng charcol1 = tên thao tác, datecol2 = Ngày giờ thực hiện. Công ty cổ phần đầu t− phát triển công nghệ - FPT Giáo trình SQL và PL/SQL Đào tạo cơ bản: SQL và PL/SQL Trang 76 23 error handing Error handing là lỗi xuất hiện trong khối lệnh PL/SQL, tất cả các lỗi này sẽ chạy về phần EXCEPTION trong khối lệnh để xử lý. Khối lệnh PL/SQL gồm các thành phần DECLARE /Không bắt buộc/ Định nghĩa các biến BEGIN Đoạn lệnh; EXCEPTION /Không bắt buộc/ Hành đồng nếu lỗi xuất hiện; END; Cú pháp thực hiện các EXCEPTION; EXCEPTION WHEN exception1 [OR exception1. . .] THEN Xử lý; . . . [WHEN exception3 [OR exception4. . .] THEN Xử lý; . . .] [WHEN OTHERS THEN Xử lý; . . .] Trong đó: exception : tên lỗi n WHEN OTHERS : dùng để xử lý các tr−ờng hợp lỗi khác Điều kiện kích hoạt exception Có 2 nhóm exception: • Các exception của bản thân Oracle nh−: NO_DATA_FOUND, FOUND, TOO_MANY_ROW ... • Các exception do ng−ời sử dụng khai báo Các exception hệ thống tự động bị kích hoạt trong các tr−ờng hợp nhất định. Các exception ng−ời sử dụng định nghĩa phải tự kích hoạt, ví dụ RAISE exception_identifier; Một số exception hay dùng của bản thân Oracle: Tên Mã lỗi Mô tả NO_DATA_FOUND ORA_01403 Câu lệnh SELECT INTO không trả về row nào TOO_MANY_ROW ORA_01422 Câu lệnh SELECT INTO không trả về lớn hơn 1 row INVALID_CURSOR ORA_01001 Lỗi xử lý CURSOR ZERO_DIVIDE ORA_01476 Lỗi chia cho 0 Công ty cổ phần đầu t− phát triển công nghệ - FPT Giáo trình SQL và PL/SQL Đào tạo cơ bản: SQL và PL/SQL Trang 77 DUP_VAL_ON_INDEX ORA_00001 Lỗi giá trị bị trùng lắp trong một UNI QUE INDEX Ví dụ Xoá những nhân viên trong bảng emp nếu tại phòng nhân viên đó làm việc chỉ có một nhân viên; trong Procedure buider PROCEDURE DELEMP (V_EMP IN EMP.EMPNO%TYPE) IS V_ID EMP.EMPNO%TYPE; BEGIN SELECT EMPNO INTO V_ID FROM EMP WHERE EMPNO = V_EMP; DELETE FROM EMP WHERE EMPNO = V_EMP; COMMIT; EXCEPTION WHEN NO_DATA_FOUND THEN ROLLBACK; TEXT_IO.PUT_LINE(TO_CHAR(V_EMP)||'KHONG CO'); WHEN TOO_MANY_ROWS THEN ROLLBACK; TEXT_IO.PUT_LINE('CO LOI DU LIEU TRONG BANG EMP'); WHEN OTHERS THEN ROLLBACK; TEXT_IO.PUT_LINE('CO LOI KHAC TRONG BANG EMP'); END; Gọi chạy delemp(7364); Các exception do ng−ời sử dụng định nghĩa Khai báo exception identifier EXCEPTION; Ví dụ: DECLARE credit_exceeded EXCEPTION; BEGIN IF stock_ordered > credit_limit THEN RAISE credit_exceeded; END IF .... EXCEPTION WHEN credit_exceeded THEN .... END; Đặt tên cho các exception hệ thống Mỗi exception hệ thống đ−ợc gán một số xác định, có thể đặt tên cho các exception để dễ sử dụng hơn. PRAGMA EXCEPTION_INIT (exception_identifier, number) Công ty cổ phần đầu t− phát triển công nghệ - FPT Giáo trình SQL và PL/SQL Đào tạo cơ bản: SQL và PL/SQL Trang 78 Ví dụ DECLARE fetch_failed EXCEPTION; PRAGMA EXCEPTION_INIT (fetch_failed, -1002); BEGIN .... EXCEPTION WHEN fetch_failed THEN .... END; 23.1 Bài tập 1. Dùng EXCEPTION bắt lỗi chặt hơn cho các bài tập từ phần 19-22.
File đính kèm:
- Đào tạo Oracle cơ bản - Giáo trình SQL và PL SQL.pdf