Đà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

pdf78 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 4501 | Lượt tải: 5download
Tóm tắt nội dung Đào tạo Oracle cơ bản - Giáo trình SQL và PL SQL, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 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:

  • pdfĐào tạo Oracle cơ bản - Giáo trình SQL và PL SQL.pdf
Tài liệu liên quan