Tải bản đầy đủ
III. KẾT QUẢ THỰC NGHIỆM

III. KẾT QUẢ THỰC NGHIỆM

Tải bản đầy đủ

BEGIN
SELECT SEQUENCE_TUTANG_EVENT_PR_PHIM.NEXTVAL INTO
:NEW.MAEVENT
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_EVENT_PR_PHIM ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_HOPDONGMUAPHIM
-------------------------------------------------------CREATE OR REPLACE TRIGGER
TRIGGER_TUTANG_HOPDONGMUAPHIM
BEFORE INSERT ON hopdongmuaphim
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_hopdongmuaphim.NEXTVAL INTO
:NEW.sohd
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_HOPDONGMUAPHIM
ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_LICHCHIEU
-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_LICHCHIEU
BEFORE INSERT ON lichchieu
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_lichchieu.NEXTVAL INTO :NEW.stt
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_LICHCHIEU ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_LOAITB
19

-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_LOAITB
BEFORE INSERT ON loaitb
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_loaitb.NEXTVAL INTO :NEW.maloai
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_LOAITB ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_NHACC
-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_NHACC
BEFORE INSERT ON nhacc
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_nhacc.NEXTVAL INTO :NEW.Mancc
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_NHACC ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_NHANVIEN
-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_NHANVIEN
BEFORE INSERT ON nhanvien
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_nhanvien.NEXTVAL INTO :NEW.manv
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_NHANVIEN ENABLE;
20

-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_PHIM
-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_PHIM
BEFORE INSERT ON phim
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_phim.NEXTVAL INTO :NEW.map
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_PHIM ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_PHONG
-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_PHONG
BEFORE INSERT ON phong
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_phong.NEXTVAL INTO :NEW.maphong
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_PHONG ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_SUATCHIEU
-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_SUATCHIEU
BEFORE INSERT ON suatchieu
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_suatchieu.NEXTVAL INTO :NEW.masuat
FROM DUAL;
END;
21

/
ALTER TRIGGER TRIGGER_TUTANG_SUATCHIEU ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_THELOAI
-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_THELOAI
BEFORE INSERT ON theloai
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_theloai.NEXTVAL INTO :NEW.matl
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_THELOAI ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_THIETBI
-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_THIETBI
BEFORE INSERT ON thietbi
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_thietbi.NEXTVAL INTO :NEW.matb
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_THIETBI ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_VE
-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_VE
BEFORE INSERT ON ve
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_ve.NEXTVAL INTO :NEW.mave
22

FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_VE ENABLE;
-------------------------------------------------------• DDL for Trigger TRIGGER_TUTANG_VITRI
-------------------------------------------------------CREATE OR REPLACE TRIGGER TRIGGER_TUTANG_VITRI
BEFORE INSERT ON vitri
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEQUENCE_TUTANG_vitri.NEXTVAL INTO :NEW.mavt
FROM DUAL;
END;
/
ALTER TRIGGER TRIGGER_TUTANG_VITRI ENABLE;
3.1.2. Các View
• Xem Lịch Chiếu
Create View XemLich
As
Select l.NgayChieu, p.TenPhim, s.TenSuat
From Lichchieu l, Phim p, Suatchieu S
Where s.masuat= l.masuat and l.map=p.map


Xem Chi Tiết Vé:
create view chitietve
as
select l.Ngaychieu, v.Tensuat, v.Phong, v.maghe, v.giave, p.tenphim
from ve v, lich l, phim p
where v.masuat=l.masuat and v.ngaychieu=l.ngaychieu and v.maphong=
l.maphong and p.map=l.map



Xem chi tiết nhân viên
Create view chitietnhanvien
23

As
Select *from Nhanvien
3.1.3. Các Triger


Số thứ tự ghế phải nhỏ hơn hoặc bằng số lượng ghế trong phòng
CREATE OR REPLACE TRIGGER TR_soluong_ghe
before INSERT
ON ghe
FOR EACH ROW
DECLARE F NUMBER;
BEGIN
select count(*) into F
from phong p,(
select g.maphong ,count (g.maghe) as sg
from ghe g
where g.maphong=:new.maphong
group by g.maphong) b
where p.maphong=b.maphong and b.sg > p.so_luong_ghe;
IF (F>0) THEN
RAISE_APPLICATION_ERROR(-20000,' số ghế trong phong đã hết ');
END IF;
END;

INSERT INTO ve (manv, masuat, maphong, maghe, giave,stt) VALUES
(3,3,2,11,'70000',3);


Tự động cập nhật loại ghế (vip, thường)
create or replace
TRIGGER TR_loaighe
after insert
on ve
begin
MERGE INTO ve v
24

USING ghe g
ON (v.maghe=g.maghe)
WHEN MATCHED THEN
UPDATE SET v.loaighe = g.maloaighe ;
end;


Vé nào ghế vip thì tự update giá cao hơn, không thì bình thường
CREATE OR REPLACE TRIGGER TR_giaban
before INSERT or UPDATE of giave
on ve
REFERENCING NEW AS NEW
FOR EACH ROW
begin
update ve
set giave =
(
CASE WHEN loaighe=1 THEN :new.giave + 20000
WHEN loaighe=2 THEN :new.giave + 5000
ELSE :new.giave + 0
END
);
end;



Ngày bán vé phải nhỏ hơn hoặc bằng ngày chiếu
create or replace
TRIGGER TR_ngaybanve
before insert or update of ngay_ban_ve
on ve
begin
MERGE INTO ve v
USING lichchieu l
ON (v.ngaychieu=l.ngaychieu)
WHEN MATCHED THEN
UPDATE SET v.ngay_ban_ve = l.ngaychieu ;
end;



Không nhập trùng vé khi vé đã có
25

create or replace trigger TR_trungve
before insert
on ve
for each row
DECLARE f number;
begin
select count (*)into f
from ve v
where v.masuat =:new.masuat and v.maphong=:new.maphong and
v.maghe=:new.maghe and v.stt=:new.stt;
if(f>0) then
RAISE_APPLICATION_ERROR(-20022,'vé đã bán ');
end if;
end;


Nhân viên đứng vi trí quầy vé mới được bán vé
create or replace trigger TR_nhan_vien_ban_ve
before insert or update of manv
on ve
for each row
DECLARE f number;
begin
select count (*) into f from (
select b.manv ,b.masuat ,b.ngaychieu
from ve v , bangphancong b, vitri vt
where v.masuat = b.masuat and v.ngaychieu=b.ngaychieu and
b.mavt=vt.mavt and vt.mavt=2
group by b.manv ,b.masuat ,b.ngaychieu) b
where b.manv=:new.manv and b.masuat=:new.masuat and
b.ngaychieu=:new.ngaychieu;
if(f<=0) then
RAISE_APPLICATION_ERROR(-20022,'Nhân viên này không được
phân công bán ve');
end if;
end;



Ngày Sinh Phải nhỏ hơn ngày Hiện hành
26

CREATE OR REPLACE TRIGGER check_NGAYSINH
AFTER INSERT OR UPDATE OF NGAYSINH ON NhanVien
FOR EACH ROW
WHEN (NEW.NGAYSINH > SYSDATE)
BEGIN
RAISE_APPLICATION_ERROR (-20001, 'LOI! NHAP LAI, NGAY PHAI
NHO HON < ' || SYSDATE);
ROLLBACK;
END;
3.1.4. Các Procedure:


Viết procedure thống kê trong ngày có những vé nào đã được bán ,ngày là
tham số truyền vào
CREATE OR REPLACE PROCEDURE
sp_danh_sach_ve_ban_theo_ngay(varNgay nvarchar2)
as
CURSOR cur_danhsach is select * from
(select v.mave,v.masuat,v.maphong,v.maghe
from ve v
where v.ngay_ban_ve=TO_DATE(varNgay,'DD/MM/YYYY')
order by v.mave,v.masuat,v.maphong,v.maghe);
begin
for kh in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE( 'Mã vé : '||kh.mave ||' Mã suat : '||
kh.masuat ||' Mã phòng : '||kh.maphong ||' Mã ghe : '||kh.maghe );
end loop;
end;
set serveroutput on;
execute sp_danh_sach_ve_ban_theo_ngay('1/6/2014')



Proceduce xem danh sach top 5 phim được xem nhiều với tháng và năm là
tham số truyền vào
CREATE OR REPLACE PROCEDURE sp_top_5phim_xem_nhieu(varthang
number,varnam number)
27

as
CURSOR cur_danhsach is select * from
(select b.map ,b.tenphim
from (
SELECT count(v.mave) sove ,l.map ,p.tenphim
FROM ve v, lichchieu l ,phim p
WHERE p.map=l.map and v.masuat =l.masuat and v.maphong
=l.maphong
and v.ngaychieu=l.ngaychieu and EXTRACT(MONTH FROM
v.ngaychieu)<= varthang and EXTRACT(YEAR FROM
v.ngaychieu)=varnam
group by l.map ,p.tenphim
order by count(v.mave) desc ) b
where rownum < 6);
begin
for kh in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE( 'Mã Phim : '||kh.map ||' Tên Phim : '||
kh.tenphim );
end loop;
end;
set serveroutput on;
execute sp_top_5phim_xem_nhieu(6,2014)


Top 5 phim có doanh thu cao nhất trong tháng với tham số truyền vào là
tháng và năm
CREATE OR REPLACE PROCEDURE
sp_top_5phim_doanh_thu_cao(varthang number,varnam number)
as
CURSOR cur_danhsach is select * from
(select b.map ,b.tenphim ,b.doanhthu
from (
SELECT sum(v.giave) doanhthu ,l.map ,p.tenphim
FROM ve v, lichchieu l ,phim p
WHERE p.map=l.map and v.masuat =l.masuat and v.maphong
=l.maphong
and v.ngaychieu=l.ngaychieu and EXTRACT(MONTH FROM
v.ngaychieu)= varthang and EXTRACT(YEAR FROM v.ngaychieu)=varnam
28

group by l.map ,p.tenphim
order by sum(v.giave) desc ) b
where rownum < 6);
begin
for kh in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE( 'Mã Phim : '||kh.map ||' Tên Phim : '||
kh.tenphim||' Doanh Thu : '||kh.doanhthu ||'VND');
end loop;
end;
set serveroutput on;
execute sp_top_5phim_doanh_thu_cao(6,2014)



Top 5 phim có doanh thu thấp nhất trong tháng với tham số truyền vào là
tháng và năm
CREATE OR REPLACE PROCEDURE
sp_top_5phim_doanh_thu_thap(varthang number,varnam number)
as
CURSOR cur_danhsach is select * from
(select b.map ,b.tenphim ,b.doanhthu
from (
SELECT sum(v.giave) doanhthu ,l.map ,p.tenphim
FROM ve v, lichchieu l ,phim p
WHERE p.map=l.map and v.masuat =l.masuat and v.maphong
=l.maphong
and v.ngaychieu=l.ngaychieu and EXTRACT(MONTH FROM
v.ngaychieu)= varthang and EXTRACT(YEAR FROM v.ngaychieu)=varnam
group by l.map ,p.tenphim
order by sum(v.giave) ) b
where rownum < 6);
begin
for kh in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE( 'Mã Phim : '||kh.map ||' Tên Phim : '||
kh.tenphim||' Doanh Thu : '||kh.doanhthu ||'VND');
end loop;
end;
29