Tải bản đầy đủ - 0 (trang)
Chương 4: XÂY DỰNG VÀ QUẢN LÝ GIAO TÁC

Chương 4: XÂY DỰNG VÀ QUẢN LÝ GIAO TÁC

Tải bản đầy đủ - 0trang

Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



IS

[khai báo biến]

BEGIN



[EXCEPTION < xử lý ngoại lệ>]

END; // kết thúc hàm



Chú ý khi tạo store procedure:

- Không được dùng varchar2(n) trong đối số truyền vào (argument), kiểu dữ

liệu trong đối số truyền vào phải là không rang buộc n.

- Argument được xác định bởi:

Tên_tham số_truyền_vào [IN | OUT |I N OUT] kiểu_dữ_liệu[{:=|

DEFAULT value}]

4.1.2. Danh sách các Function

ST

T



Tên



Input parameter



1



Tinh_phat Ma, tien



Out

Parameter



Ý nghĩa



dem



Tính tiền phạt



4.1.3. Mơ tả một số Function

Tên: Tinh_phat

Nội dung: tính tiền phạt của độc giả

Tham số đầu vào: ma, tien

Tham số đầu ra: dem

Mã SQL:

CREATE OR REPLACE FUNCTION TINH_PHAT (MA IN

QTMUON.MADOCGIA%TYPE, TIEN IN NUMBER)

RETURN NUMBER

IS

DEM NUMBER:=0;

35



Ghi

chú



Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



--TEMP QTMUON%ROWTYPE;

PHAT NUMBER:=0;

TRADAY DATE;

HANDAY DATE;

CURSOR CUR IS SELECT NGAYHETHAN, NGAYTRA FROM QTMUON

WHERE MA=MADOCGIA and NGAYHETHAN < SYSDATE AND

TRANGTHAI='phat';

BEGIN

OPEN CUR;

LOOP

FETCH CUR INTO HANDAY, TRADAY;

EXIT WHEN CUR%NOTFOUND;

IF(TRADAY IS NULL) THEN

DEM:=SYSDATE-HANDAY;

DBMS_OUTPUT.PUT_LINE('NGAY:'||DEM);

PHAT:=PHAT+DEM*TIEN;

END IF;

END LOOP;

CLOSE CUR;

RETURN PHAT;

EXCEPTION

WHEN NO_DATA_FOUND THEN

RETURN 0;

END;

Bước thực hiện:

[1] Lấy dữ liệu ngày hết hạn, ngày trả của độc của sách mà độc giả bị phạt

[2] Tính số ngày phạt

[3] Tính số tiền phạt với cơng thức: Tổng tiền mới = tổng tiền cũ + số ngày phạt *

giá phạt.

4.2 Stored procedure

4.2.1. Store procedure trong Oracle

Thủ tục là một chương trình con để thực hiện một hành động cụ thể nào đó.

Hàm và thủ tục giống nhau, khác nhau ở chỗ hàm thì có mệnh đề return.

Stored procedure giúp giảm thời gian giao tiếp giữa các ứng dụng với hệ

quản trị, bởi vì thay vì gửi nhiều câu lệnh dài thì ta chỉ cần gọi tới một thủ

tục và trong thủ tục này sẽ thực hiện nhiều câu lệnh SQL.



36



Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



Stored procudure sẽ giúp các ứng dụng nhìn minh bạch hơn, nghĩa là khi ta

định nghĩa các thao tác xử lý vào một Stored thì cơng việc của các ngơn

ngữ lập trình khác chỉ quan tâm đến tên thủ tục, các tham số truyền vào chứ

khơng cần biết nó thực hiện như thế nào. Mỗi thủ tục sẽ có các mức độ truy

cập, nghĩa là ta có thể cấp quyền sử dụng cho một User nào đó trong hệ

quản trị.

Stored procedure cũng có một số nhược điểm. Nếu tạo ra quá nhiều

Procedure thì hệ quản trị sẽ sử dụng bộ nhớ để lưu trữ các thủ tục này khá

nhiều. Ngoài ra nếu thực hiện quá nhiều xử lý trong mỗi thủ tục thì đồng

nghĩa với việc CPU sẽ làm việc nặng hơn.

Cú pháp:

CREATE OR REPLACE PROCEDURE tên_thủ tục

[(parameter1 [, parameter2, ...)] IS

[khai báo biến]

BEGIN



[EXCEPTION ]

END;// Kết thúc thủ tục

Chú ý khi tạo store procedure:

- Không được dùng varchar2(n) trong đối số truyền vào (argument), kiểu dữ

liệu trong đối số truyền vào phải là không rang buộc n.

- Argument được xác định bởi:

Tên_tham số_truyền_vào [IN | OUT |I N OUT] kiểu_dữ_liệu [{:=| DEFAULT

value}]

4.2.2. Transaction trong Oracle

Transaction là một module dùng để xử lý những tập hợp truy vấn có liên

quan đến nhau, và thường được dùng nhất là trong những giao dịch đòi hỏi

phải có kết quả chính xác, đó chính là lý do tại sao người ta lấy tên là

transaction (giao dịch).

37



Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



Transaction (giao tác) là một nhóm câu lệnh SQL, xử lý có tuần tự các

thao tác trên cơ sở dữ liệu nhưng được xem như là một đơn vị duy nhất. Vì

vậy, một transaction sẽ không được coi là thành công nếu như trong q

trình xử lý có một thao tác trong nó khơng được hồn thành. Trường hợp

này, transaction được coi là thất bại.

Các tính chất của transaction:

- Atomicity (tính nguyên tố): Đảm bảo rằng tất cả các hoạt động trong

phạm vi một đơn vị làm việc là thành cơng hồn toàn. Ngược lại,

transaction sẽ bị hủy Đề tài Quản lý Rạp chiếu phim GVHD: ThS. Đỗ

Thị Minh Phụng 37 ngay tại điểm lỗi. Và các các họat động trước sẽ

được quay lại đúng trạng thái trước đó của nó.

- Consistency (tính nhất quán): Đảm bảo cơ sở dữ liệu thay đổi đúng trạng

thái khi khi transaction kết thúc thành công.

- Isolation (tính độc lập): Cho phép transaction hoạt động một cách độc

lập và “trong suốt” (transparent) với các transaction khác.

- Durability (tính bền vững): Đảm bảo kết quả hoặc tác động của

transaction vẫn luôn tồn tại kể cả khi hệ thống bị lỗi.

Transaction được bắt đầu bằng câu lệnh START TRANSACTION; hoặc

BEGIN WORK; và kết thúc khi có lệnh COMMIT, hoặc ROLLBACK. Lệnh

COMMIT xác nhận việc thực hiện giao tác thành công và ghi nhận các thay

đổi. Lệnh ROLLBACK khôi phục lại các thay đổi.

Các trạng thái của giao tác:

- Active: Ngay khi bắt đầu thực hiện thao tác đọc/ghi

- Partially commited: Sau khi lệnh thi hành cuối cùng thực hiện

- Failed: Sau khi nhận ra không thể thực hiện các hành động được nữa

- Aborted: Sau khi giao tác được quay lui và CSDL được phục hồi về trạng

thái trước trạng thái bắt đầu giao dịch (bắt đầu lại giao tác hay hủy giao tác)

- Commited: Sau khi mọi hành động hồn tất thành cơng

- Sơ đồ trạng thái của giao tác:

38



Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



Cách khai báo Transaction trong Oracle:

// Khai báo bắt đầu transaction

START TRANSACTION;

// Nội dung transaction

// Commit transaction

COMMIT TRANSACTION



Cấu trúc Transaction trong Oracle:

- Bắt đầu transaction:

 Transaction bắt đầu khi câu lệnh SQL đầu tiên được thực thi, bao

gồm DDL, DML hoặc lệnh SET TRANSACTION.

 TRANSACTION NAME: Đặt tên cho transaction, bắt đầu

transasction

 SET TRANSACTION NAME (trước lệnh này nên có 1 lệnh

COMMIT)

 Khi 1 transaction mới bắt đầu, hệ quản trị oracle sẽ gán nó vào undo

data segment (ghi nhận lại các thao tác của transaction trước khi

commit, để có thể rollback khi có lỗi).



39



Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



- Kết thúc transaction:

 Transaction có thể kết thúc trong nhiều trường hợp.

 Gặp lệnh COMMIT hoặc ROLLBACK mà không có savepoint.

 Gặp các câu lệnh DDL như create, drop, rename, alter

 User ngắt kết nối đến hệ quản trị đột ngột, transaction sẽ tự động

commit

 Các ứng dụng đang kết nối đến hệ quản trị bị dừng đột ngột,

transaction sẽ tự động rollback.

 1 Transaction đang thực thi là 1 Transaction đã bắt đầu nhưng

chưa được COMMIT hoặc ROLLBACK.

Transaction được bắt đầu bằng câu lệnh START TRANSACTION; hoặc

BEGIN WORK; và kết thúc khi có lệnh COMMIT, hoặc ROLLBACK.

Lệnh COMMIT xác nhận việc thực hiện giao tác thành công và ghi nhận

các thay đổi. Lệnh ROLLBACK khôi phục lại các thay đổi.

4.2.3. Danh sách stored procedure



STT Tên

1

count_doc_gia



Input parameter

v_ngay



Out Parameter

count_docgia



2



so_sach_muon



Khơng có



count_sach_mu

on



3



xem_thong_tin_

sach



in_masach



v_manhap,

v_manxb,

v_tensach,

v_tacgia,

v_namxb,

v_trangthai,

v_ngonngu,

v_tentheloai,



40



Ý nghĩa

Biết được số

lượng độc giả

mượn sách

trong một

ngày cụ thể

được nhập vào

Số lượng sách

trong thư viện

đang ở trạng

thái mượn

Xem thông tin

sách khi nhập

vào mã sách

cần xem



Ghi chú



Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



v_taiban

count_row_ma

_sach_khong_m

uon



4



xoa_sach_khong Khơng có

_ai_muon



5



thong_ke_tien_p in_madocgia

hat



v_tong_tienphat



6



so_sach_chua_

muon



count_sach_

chua_muon



7



them_phieu_pha in_maphieuphat_p Khơng có

t

p,

in_madocgia_pp,

in_mathuthu_pp,

in_masach_pp,

in_tienphat_pp,

in_ngaytra_pp,

in_ngayhethan_pp

dem_sach

Khơng có

v_sl



8

9



them_sach_thu_

vien



10



Sp_nxb



41



Khơng có



in_masach,

in_manxb,

in_tensach,

in_tacgia,

in_namxb,

in_trangthai,

in_ngonngu,

in_manhap,

in_theloai,

in_taiban

In_manxb



Khơng có



V_manxb,

v_tennxb,

V_tensach,

V_count



Xóa những

sách trong thư

viện mà không

ai mượn trong

2 năm

Thống kê tiền

phạt theo từng

độc giả

Số lượng sách

trong thư viện

đang ở trạng

thái chưa

mượn

Thêm phiếu

phạt cho độc

giả khi mượn

sách có sách

mượn quá hạn



Thống kê số

lượng sách

trong thư viện

Thêm sách



Nhập vào một

nhà xuất bản

in ra thông tin

tên nhà xuất

bản, chi tiết

nhà xuất bản,

tên sách, số

lượng sách.



Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



11



sp_DocGiaDaTr

aSachQHan



Không có



Count_row



12



sp_DocGiaChuT Khơng có

raSachQHan



Count_row



13



sp_DocGiaDang Khơng có

MuonSach



Count_row



14



Sp_xoasach



In_masach



V_masach



15



Add_docgia



16



Show_dangmuo

nsach



Vtentk, vmatkhau, Khơng có

vloaitk,

vmadocgia, vten,

vngaysinh, vsdt,

vdiachi, vlop,

vdoituong,

vgioitinh,

vghichu, vemail

Khơng có

V_ma



17



Show_dangmuo

nsachquahan



Khơng có



V_ma



18



Xoa_nhanvien



ma



Khơng có



19



Add_nhanvien



Vtentk, vmatkhau, Khơng có

vloaitk,

vmanhanvien,

vhoten,

vngaysinh, vsdt,

vdiachi, vgioitinh,

vemail, vchucvu,



Thêm nhân

viên



20



trasach



v_masach,

v_madocgia,



Độc giả đến

trả sách mượn



42



phat



Số lượng độc

giả mượn quá

hạn nhưng đã

trả

Số lượng độc

giả mượn quá

hạn nhưng

chưa trả

Số lượng độc

giả đang mượn

sách

Xóa sách trong

thư viện

Thêm độc giả



Liệt kê các

độc giả đang

mượn sách

Liệt kê các

độc giả đang

mượn sách quá

hạn

Xóa nhân viên



Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



v_maphieuphat,

v_manhanvien,

v_ngaytra,

v_ngayhethan

21



PC_THONGTI

NDOCGIA



MADG



22



CHOMUON_S

ACH



23



XOA_DOCGIA



CHOMUON_SA

CH,

V_MASACH,

V_MADOCGIA

MA



V_MADG

V_HOTEN

V_NGAYSINH

V_SDT

V_DIACHI

V_LOP

V_DOITUONG

V_GIOITINH

V_EMAIL

DEM



Xem thơng tin

độc giả



TEMP



Xố độc giả



Cho mượn

sách



4.2.4. Mơ tả một số stored procdure

4.2.4.1.



Thêm sách



Tên: SP_THEMSACH

Nội dung: Thêm sách vào cơ sở dữ liệu.

Tham số đầu vào: IN_MASACH char (5)

Tham số đầu ra: Khơng có.

Mã SQL:

CREATE OR REPLACE PROCEDURE SP_THEMSACH (IN_MASACH

SACH.MASACH%TYPE, IN_THELOAI SACH.THELOAI%TYPE,

IN_MANHAP SACH.MANHAP%TYPE, IN_MANXB SACH.MANXB

%TYPE, IN_TENSACH SACH.TENSACH%TYPE, IN_TACGIA

SACH.TACGIA%TYPE, IN_NAMXB SACH.NAMXB%TYPE,

IN_TRANGTHAI SACH.TRANGTHAI%TYPE, IN_NGONNGU

SACH.NGONNGU%TYPE,IN_TAIBAN SACH.TAIBAN%TYPE)

AS



43



Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



V_MASACH SACH.MASACH%TYPE;

V_LOI EXCEPTION;

BEGIN

SELECT MASACH INTO V_MASACH

FROM SACH, NHAXUATBAN, PHIEUNHAPSACH

WHERE SACH.MASACH=IN_MASACH;

IF V_MASACH IS NOT NULL THEN RAISE V_LOI;

END IF;

EXCEPTION WHEN V_LOI THEN

DBMS_OUTPUT.PUT_LINE ('sach da ton tai');

WHEN NO_DATA_FOUND THEN

INSERT INTO SACH VALUES (IN_MASACH, IN_THELOAI,

IN_MANHAP, IN_MANXB, IN_TENSACH, IN_TACGIA, IN_NAMXB,

IN_TRANGTHAI, IN_NGONNGU, IN_TAIBAN);

DBMS_OUTPUT.PUT_LINE ('Them sach thanh cong!');

END;



Bước thực hiện:

[1] Tạo store produre thêm sách vào hệ thống.

[2] Kiểm tra mã sách:

 Nếu mã sách đã có trong hệ thống, hiển thị ‘sach da ton tai’

 Nếu mã sách khơng có trong hệ thống, tiến hành thêm sách

[3] Kết thúc.

4.2.4.2.



Xóa sách khơng ai mượn



Tên: xoa_sach_khong_ai_muon

Nội dung: Xóa sách trong thư viện mà khơng ai mượn trong vòng 2 năm

Tham số đầu vào: Khơng có

44



Đề tài Hệ thống Quản lý thư viện



GVHD: ThS. Đỗ Thị Minh Phụng



Tham số đầu ra: Khơng có

Mã SQL:

create or replace procedure xoa_sach_khong_ai_muon

as

count_row_ma_sach_khong_muon number;

count_row_phieu_nhap number;

begin

select count (*) into count_row_ma_sach_khong_muon

from SACH

where masach not in (select masach

from QTMUON, PHIEUNHAPSACH

where QTMUON.masach=SACH.masach and extract (year

from(sysdate))- extract (year from (ngaygiao)) <2

and SACH.manhap=PHIEUNHAPSACH.manhap);

select count (*) into count_row_phieu_nhap

from PHIEUNHAPSACH

where PHIEUNHAPSACH.manhap in (select PHIEUNHAPSACH.manhap

from SACH, PHIEUNHAPSACH

where SACH.manhap=PHIEUNHAPSACH.manhap and

SACH.masach not in (select SACH.masach

from QTMUON, PHIEUNHAPSACH, sach

where QTMUON.masach=SACH.masach and

extract (year from(sysdate))- extract (year from

(ngaygiao)) <2

and

SACH.manhap=PHIEUNHAPSACH.manhap));



45



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Chương 4: XÂY DỰNG VÀ QUẢN LÝ GIAO TÁC

Tải bản đầy đủ ngay(0 tr)

×