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

Bài giảng Hệ quản trị cơ sở dữ liệu: Chương 4 - Nguyễn Thị Mỹ Dung

47 12 0

Đ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

Thông tin cơ bản

Tiêu đề Lập trình PL/SQL
Tác giả Nguyễn Thị Mỹ Dung
Trường học Đại học
Chuyên ngành Hệ quản trị cơ sở dữ liệu
Thể loại bài giảng
Định dạng
Số trang 47
Dung lượng 2,27 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Hệ quản trị cơ sở dữ liệu: Chương 4 Lập trình PL/SQL cung cấp cho người học những kiến thức như: Cấu trúc chương trình PL/SQL; Các kiểu dữ liệu cơ bản của PL/SQL; Các kiểu dữ liệu phức tạp; Các loại mệnh đề; Cấu trúc điều khiển; Kiểu con trỏ.

Trang 2

NỘI DUNG MÔN HỌC

Trang 3

Chương 4: Lập trình PL/SQL

II Các kiểu dữ liệu cơ bản của PL/SQL

III Các kiểu dữ liệu phức tạp

IV Các loại mệnh đề

V Cấu trúc điều khiển

VI Kiểu con trỏ

VII Bài tập thực hành

Trang 4

I Cấu trúc chương trình PL/SQL

1 Giới thiệu

PL/SQL (Procedural Language/Structured Query

thủ tục sử dụng cho Oracle SQL

PL/SQL là sự kết hợp giữa SQL và các khai báo

hằng số, biến, cấu trúc điều khiển, thủ tục, hàm, bẫy lỗi sự kiện, thao tác con trỏ, và xử lý giao tác…

Mọi thứ được lưu trữ trong DB được tái sử dụng bởi các ứng dụng bất kỳ giao tiếp với ứng dụng Oracle

Trang 5

Cấu trúc PL/SQL – giới thiệu(tt)

- PL/SQL tổ chức theo từng khối lệnh (block), mỗi khối lệnh có thể lồng nhau Các biến có thể khai báo nội (local) bên trong khối và điền khiển báo lỗi bên trong khối nơi lỗi phát sinh

- Một block bao gồm ba phần: phần khai báo là nơi để khai báo biến, phần thi hành lệnh và phần xử

lý các ngoại lệ (điều kiện lỗi hoặc cảnh báo)

FUNCTION: nếu là Block ngoài cùng (đầu tiên) của

PROCEDURE, FUNCTION thì không dùng từ khóa

cùng (đầu tiên) phải có DECLARE)

Trang 6

DECLARE /*Phần Khai báo biến Block 2*/

Các xử lý ngoại lệ (Exception Handlers)

Trang 8

II Kiểu dữ liệu trong PL/SQL

1 Các kiểu dữ liệu cơ bản như sau:

Trang 9

Các kiểu dữ liệu cơ bản (tt)

- DATE: thế kỷ, năm, tháng, ngày, giờ, phút, giây

- CHAR (max_length): kiểu ký tự

- VARCHAR2 (max_length): max_length<=32767

- LONG: <=32760 bytes

Trang 10

heso CONSTANT NUMBER(3,2) := 1.86;

- Với các kiểu dữ liệu trong Oracle như NUMBER, CHAR, VARCHAR2, DATE, LONG,… PL/SQL cho phép như BOOLEAN

gán

Trang 11

kq BOOLEAN; không có column kiểu boolean,

chỉ có kiểu dữ liệu Boolean trong PL/SQL

kq := kinhphi >20;

- Độ ưu tiên của toán tử: ** (phép lũy thừa), NOT , *, /, +, -, || (phép nối chuỗi), =, !=, <>, <=, >=, IS NULL , LIKE , BETWEEN , IN , AND , OR

Trang 12

Kiểu dữ liệu (tt)

3 Nhập xuất dữ liệu

- Lệnh xuất:

DBMS_OUTPUT.PUT_LINE ('Nội dung');

lệnh SET SERVEROUTPUT ON

- Lệnh nhập: 2 cách để nhập giá trị cho biến

 Biến thay thế &: dấu & đặt trước biến Biến

được nhập giá trị lúc thực thi

 Biến thay thế &&: dấu && đặt trước biến Giá trị

nhập vào được lưu trữ cho những lần sau

Lưu ý:

Biến kiểu chuỗi, kiểu ngày đặt trong cặp dấu ' '

Trang 13

Kiểu dữ liệu – Nhập xuất (tt)

Ví dụ:

SET SERVEROUTPUT ON;

DECLARE

x number; BEGIN

x:=&x;

DBMS_OUTPUT.PUT_LINE('Gia tri x ='); DBMS_OUTPUT.PUT_LINE(x);

END;

Trang 14

III Kiểu dữ liệu tham chiếu

Dùng để khai báo một biến mà nó tham chiếu đến một cột trong CSDL

Khai báo:

<TÊNBIẾN>

SET SERVEROUTPUT ON;

Trang 15

Kiểu dữ liệu tham chiếu (tt)

Dùng để khai báo một biến mà nó tham chiếu đến một dòng trong cơ sở dữ liệu (Có cấu trúc như một dòng trong Table)

Khai báo: <TÊNBIẾN>

SELECT * INTO row_detai

FROM detai WHERE MADT= 'DT001';

DBMS_OUTPUT.PUT_LINE (row_detai.MADT || ' : ' ||

row_detai.TENDT );

END;

Trang 16

Kiểu dữ liệu tham chiếu (tt)

Dùng để khai báo một biến mà nó tham chiếu đến một bảng trong CSDL (Có cấu trúc như một Table)

Khai báo:

TYPE <TÊNBẢNG> IS TABLE OF <KIỂU> [ NOT NULL ]

INDEX BY BINARY_INTEGER;

<TÊNBIẾN><TÊNBẢNG>;

Trang 17

Kiểu dữ liệu tham chiếu - table(tt)

END;

Trang 19

TENKH := 'Su pham Toan - Tin';

INSERT INTO KHOA (MAKH, TENKH) VALUES (MAKH, TENKH);

EXCEPTION WHEN OTHERS THEN

END;

Trang 20

V Các cấu trúc điều khiển

Trang 22

IF n=1 THEN ngay := 'Sunday';

ELSIF n=2 THEN ngay :='Monday';

ELSIF n=3 THEN ngay :='Tuesday';

ELSIF n=4 THEN ngay :='Wedsday';

ELSIF n=5 THEN ngay :='Thursday';

ELSIF n=6 THEN ngay :=‘Friday';

ELSIF n=7 THEN ngay :=‘Saturday';

END IF;

DBMS_OUTPUT.PUT_LINE(ngay);

END ;

Trang 23

Các cấu trúc điều khiển (tt)

Trang 24

Cấu trúc điều khiển - Loop(tt)

End IF ; END LOOP ;

END ;

Trang 25

Cấu trúc điều khiển (tt)

3 Lệnh lặp FOR…LOOP

Cú pháp:

FOR <biến-chạy>

IN giá-trị-khởi-tạo giá-trị-kết-thúc LOOP

<khối lệnh>

END LOOP;

Trang 26

Cấu trúc điều khiển - For (tt)

END ;

Trang 27

Cấu trúc điều khiển – For (tt)

Trang 28

Cấu trúc điều khiển – While (tt)

END ;

Trang 29

Cấu trúc điều khiển (tt)

- GOTO không được phép trong một số trường hợp:

 Từ một xử lý ngoại lệ vào trong khối hiện hành

 Nhảy ra ngoài chương trình con

Trang 30

Cấu trúc điều khiển – Goto (tt)

End ; /*End của <<inner_block>>*/

End ; /*End của <<outer_block>>*/

END ;

Trang 31

Cấu trúc điều khiển (tt)

6 Xử lý ngoại lệ - EXCEPTION

Khi một lỗi phát sinh, một ngoại lệ được đưa ra, việc thực hiện chương trình bình thường được dừng lại và điều khiển được chuyển tới khối PL/SQL chứa phần xử lý ngoại lệ

Những ngoại lệ bên trong được sinh ra một cách tiềm ẩn (không tường minh, implicit), trái lại những

cách tường minh (explicit) bằng cách sử dụng câu lệnh RAISE

VD: Nếu chia một số cho zero, một ngoại lệ do Oracle định nghĩa trước (ví dụ: ZERO_DIVIDE) sẽ tự động sinh ra

Trang 32

Cấu trúc điều khiển – Exception (tt)

IF <điều kiện lỗi> then

RAISE loi_ngoai_le; /*bật ngoại lệ*/

Trang 33

Cấu trúc điều khiển – Exception (tt)

Ví dụ: (ta quy định trả về 1 nếu trùng mã số, trả về 2: bình thường)

Create Function Test_Exception (maso number) return number As

trung_ma_so EXCEPTION ; /*khai bao 1 ngoai le ten “trung_ma_so”*/ BEGIN

WHEN trung_ma_so then

return 1; /*da co ma so nay roi*/

WHEN OTHERS then

/*sử dụng từ khóa OTHERS cho các lỗi khác past_due, việc sử dụng OTHERS

đảm bảo không có ngoại lệ nào sẽ không được xử lý*/

return 0; /*loi phat sinh*/ END ;

Trang 34

Cấu trúc điều khiển – Exception (tt)

Các lỗi ngoại lệ do Oracle định nghĩa

Ngoại lệ Điều kiện khi ngoại lệ xảy ra

CURSOR_ALREADY_OPEN Mở một cursor, mà cursor đó đã ở trạng thái đang

LOGIN_DENIED Đăng nhập sai username/password

NO_DATA_FOUND Câu lệnh SELECT INTO không trả về dòng nào NOT_LOGGED_ON Một chương trình PL/SQL cần thao tác đến CSDL

Oracle nhưng lại chưa đăng nhập vào CSDL

PROGRAM_ERROR Một số lỗi chương trình, ví dụ một hàm (function)

không chứa mệnh đề RETURN trả về giá trị

Trang 35

Cấu trúc điều khiển – Exception (tt)

Các lỗi ngoại lệ do Oracle định nghĩa (tt)

Ngoại lệ Điều kiện khi ngoại lệ xảy ra

STORAGE_ERROR Lỗi bộ nhớ

TIMEOUT_ON_RESOURCE Lỗi timeout xảy ra khi Oracle đang chờ tài nguyên TOO_MANY_ROWS Câu lệnh SELECT INTO trả về nhiều hơn một

dòng VALUE_ERROR Lỗi chuyển kiểu dữ liệu hoặc thao tác vi phạm

ràng buộc toàn vẹn (RBTV) ZERO_DIVIDE Lỗi chia một số cho zero

Trang 36

Cấu trúc điều khiển – Exception (tt)

Ví dụ ngoại lệ ZERO_DIVIDE do Oracle định nghĩa:

Create Function Test_Exception (so number)

WHEN ZERO_DIVIDE then

/*loi do Oracle dinh nghia*/

return 0; /*Loi chia zero*/

Trang 37

Cấu trúc điều khiển – Exception (tt)

Ví dụ ngoại lệ NO_DATA_FOUND do Oracle định nghĩa:

select * into Sinhvien_Row

from SINHVIEN where masv = masv_t;

DBMS_OUTPUT.PUT_LINE (Sinhvien_Row.HotenSV); EXCEPTION

DBMS_OUTPUT.PUT_LINE ('khong co sv nay');

END ;

Trang 38

VI Kiểu con trỏ

1 Giới thiệu

Con trỏ (cursor) là một đối tượng liên kết với một tập dữ liệu và cho phép người lập trình làm việc với từng dòng của tập dữ liệu đó

Cho phép xử lý dữ liệu gồm nhiều dòng Số dòng được lấy ra xử lý phụ thuộc vào lệnh xử lý sau đó

Trong xử lý, các thao tác sẽ tác động lên từng mẩu tin của dữ liệu đã được nạp vào con trỏ

Có hai loại con trỏ: con trỏ đuợc khai báo tường minh (explicit cursor) và con trỏ không được khai báo tường minh (hay còn gọi là con trỏ tiềm ẩn

(implicit cursor))

Trang 39

Con trỏ (tt)

 Con trỏ tiềm ẩn: một lệnh SQL được xử lý bởi Oracle và không được đặt tên bởi người sử dụng

Các lệnh SQL được thực hiện trong một con trỏ tiềm ẩn

bao gồm UPDATE, INSERT, DELETE

Ví dụ:

Khối lệnh

INSERT INTO KHOA (MAKH, TENKH)

VALUES (‘TH’, ‘Tin hoc’)

 Con trỏ tường minh: Là con trỏ được đặt tên bởi người

sử dụng (câu SELECT được đặt tên)

Ví dụ:

CURSOR c_kh IS

SELECT MAKH, TENKH FROM KHOA

Trang 40

Con trỏ (tt)

2 Khai báo cursor (khai báo con trỏ)

Các bước thực hiện trên con trỏ:

Khai báo -> mở cursor -> lấy dữ liệu để xử lý

-> đóng cursor

Cú pháp:

Khai báo con trỏ

CURSOR tên_cursor IS Câu_SELECT;

Trang 41

Con trỏ (tt)

3 Thuộc tính con trỏ tường minh

Mọi con trỏ khai báo tường minh đều có 4 thuộc tính: %NOTFOUND, %FOUND, %ROWCOUNT,

phần tên của con trỏ

%ISOPEN TRUE nếu con trỏ đang mở, ngược lại trả

về FALSE

%NOTFOUND Trả về TRUE khi đã fetch đến dòng cuối

cùng của con trỏ, ngược lại bằng FALSE

%FOUND Ngược lại với %NotFound

%ROWCOUNT Trả về số dòng của con trỏ đã được fetch

Trang 42

Con trỏ (tt)

Ví dụ 1 con trỏ: in danh sách đề tài

DECLARE

CURSOR C_DETAI IS 1 Khai báo con trỏ

SELECT MADT, TENDT, CHUNHIEM, KINHPHI

FROM DETAI;

V_DETAI C_DETAI%ROWTYPE; Khai báo biến con trỏ truy cập

OPEN C_DETAI; 2 Mở con trỏ

DBMS_OUTPUT.PUT_LINE('MADT | TENDT | CHUNHIEM| KINHPHI');

LOOP

FETCH C_DETAI INTO V_DETAI; 3 Lấy mẩu con trỏ

EXIT WHEN C_DETAI%NOTFOUND; Thoát khỏi vòng lặp khi ctrỏ rỗng

Trang 44

Con trỏ (tt)

 SELECT FOR UPDATE

Cho phép khóa các mẫu tin đang truy xuất để tiến hành xử lý

Các mẫu tin tự động bị khóa khi mở Cursor và khóa khi được COMMIT/ ROLLBACK

Cú pháp: UPDATE <têncột> [ | DELETE <tên cột>]

WHERE CURRENT OF <têncontrỏ>

Trang 45

SET HOTENSV = ‘Nguyen Van An’

WHERE CURRENT OF C_SINHVIEN -

Trang 46

VII Bài tập

A Viết chương trình tính tổng từ 1  n, với n nhập vào

B Viết khối PL/SQL cho phép:

1 Hiển thị họ tên sinh viên, học lực và mã số đề tài, kết quả thực

hiện, với mã số sinh viên được nhập từ bàn phím

2 Tăng kinh phí cho những đề tài:

Đề tài nào có kinh phí như yêu cầu”

danh sách đề tài cùng với kinh phí thực hiện

Trang 47

Tóm tắt chương

- Tìm hiểu cấu trúc chương trình PL/SQL

- Các mệnh đề trong PL/SQL

- Cấu trúc điều khiển IF

- Cấu trúc vòng lặp loop, for, while

- Lập trình con trỏ PL/SQL

Ngày đăng: 13/07/2021, 11:42

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm