Tải bản đầy đủ (.docx) (5 trang)

thi oracle BaithuchanhORACLE so 3 tai truong dai hoc sai gon

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (24.93 KB, 5 trang )

Create table LOAI
(
MALOAI Number NOT NULL,
TENLOAI NVarchar2(50),
primary key (MALOAI)
);
Create table SANPHAM
(
MASP Number NOT NULL,
TENSP NVarchar2(50) unique,
MALOAI Number NOT NULL,
primary key (MASP)
);
Create table NHANVIEN
(
MANV Varchar2 (4) NOT NULL,
HOTEN NVarchar2(50),
NGAYSINH Date,
PHAI NVarchar2(10) check (PHAI in ('Nam', 'Nữ')),
primary key (MANV)
);
Create table PHIEUXUAT
(
MAPX Number NOT NULL,
NGAYLAP Date,
MANV Varchar2 (4) NOT NULL,
primary key (MAPX)
);
Create table CHITIETXUAT



(
MAPX Number NOT NULL,
MASP Number NOT NULL,
SOLUONG Number,
primary key (MASP,MAPX)
);
-- Định nghĩa các khóa ngoại:
Alter table SANPHAM add foreign key (MALOAI) references LOAI (MALOAI);
Alter table PHIEUXUAT add foreign key (MANV) references NHANVIEN (MANV);
Alter table CHITIETXUAT add foreign key (MAPX) references PHIEUXUAT (MAPX);
Alter table CHITIETXUAT add foreign key (MASP) references SANPHAM (MASP);
-INSERT INTO LOAI (MALOAI, TENLOAI) VALUES (1, 'Vật liệu xây dựng');
INSERT INTO LOAI (MALOAI, TENLOAI) VALUES (2, 'Hàng tiêu dùng');
INSERT INTO LOAI (MALOAI, TENLOAI) VALUES (3, 'Ngũ cốc');
-INSERT INTO SANPHAM (MASP, TENSP, MALOAI) VALUES (1, 'Xi măng', 1);
INSERT INTO SANPHAM (MASP, TENSP, MALOAI) VALUES (2, 'Gạch', 1);
INSERT INTO SANPHAM (MASP, TENSP, MALOAI) VALUES (3, 'Gạo nàng hương', 3);
INSERT INTO SANPHAM (MASP, TENSP, MALOAI) VALUES (4, 'Bột mì', 3);
INSERT INTO SANPHAM (MASP, TENSP, MALOAI) VALUES (5, 'Kệ chén', 2);
INSERT INTO SANPHAM (MASP, TENSP, MALOAI) VALUES (6, 'Đậu xanh', 3);
-INSERT INTO NHANVIEN (MANV, HOTEN, NGAYSINH, PHAI) VALUES ('NV01', 'Nguyễn Mai Thi',
TO_DATE('15/05/1982','DD/MM/YYYY'), 'Nữ');
INSERT INTO NHANVIEN (MANV, HOTEN, NGAYSINH, PHAI) VALUES ('NV02', 'Trần Đình
Chiến',TO_DATE( '02/12/1980','DD/MM/YYYY') ,'Nam');
INSERT INTO NHANVIEN (MANV, HOTEN, NGAYSINH, PHAI) VALUES ('NV03', 'Lê Thế
Chi',TO_DATE( '23/01/1979','DD/MM/YYYY'), 'Nữ');


--Trước khi nhập dl cho Phiếu xuất, phải tại sequence có STT tự động tăng trước:
INSERT INTO PHIEUXUAT (NGAYLAP, MANV) VALUES (TO_DATE('12/03/2015','DD/MM/YYYY') ,'NV01');

INSERT INTO PHIEUXUAT (NGAYLAP, MANV) VALUES (TO_DATE('03/02/2016','DD/MM/YYYY'), 'NV02');
INSERT INTO PHIEUXUAT (NGAYLAP, MANV) VALUES (TO_DATE('01/06/2016','DD/MM/YYYY'), 'NV03');
INSERT INTO PHIEUXUAT (NGAYLAP, MANV) VALUES (TO_DATE('16/06/2016','DD/MM/YYYY'), 'NV01');
-INSERT INTO CHITIETXUAT (MAPX, MASP, SOLUONG) VALUES (1, 1, 10);
INSERT INTO CHITIETXUAT (MAPX, MASP, SOLUONG) VALUES (1, 2, 15);
INSERT INTO CHITIETXUAT (MAPX, MASP, SOLUONG) VALUES (1, 3, 5);
INSERT INTO CHITIETXUAT (MAPX, MASP, SOLUONG) VALUES (2, 2, 20);
INSERT INTO CHITIETXUAT (MAPX, MASP, SOLUONG) VALUES (3, 1, 20);
INSERT INTO CHITIETXUAT (MAPX, MASP, SOLUONG) VALUES (3, 3, 25);
INSERT INTO CHITIETXUAT (MAPX, MASP, SOLUONG) VALUES (4, 5, 12);

--Trigger kiểm tra ngày sinh:
SET SERVEROUTPUT ON;
-CREATE or REPLACE TRIGGER KT_Ngay_sinh
BEFORE INSERT OR UPDATE
ON NHANVIEN
FOR EACH ROW
declare NS date;
BEGIN
select :NEW.NGAYSINH into NS
from dual;
if ((sysdate-NS)/365)<18 or ((sysdate-NS)/365)>55 then
RAISE_APPLICATION_ERROR (-20500, 'Tuổi phải trong khoảng [18, 55]');
end if;
END;


------Tạo Sequence tăng STT tự động:
CREATE SEQUENCE STT
START WITH 1

INCREMENT BY 1
MINVALUE 0
MAXVALUE 10000
NOCYCLE;
--Tạo trigger cho phép tăng Mă phiếu xuất tự động bằng cách gọi Sequence:
CREATE or REPLACE TRIGGER MAPX_Tang_tu_dong
BEFORE INSERT
ON PHIEUXUAT
FOR EACH ROW
BEGIN
select STT.NextVal into :NEW.MAPX
from dual;
END;

create or replace function F1(Ten nvarchar2, Nam number)
return number
as
SLXuat number;
begin
SLXuat:=NULL;
select sum(nvl (SOLUONG,0)) into SLXuat
from SANPHAM S, CHITIETXUAT C, PHIEUXUAT P
where S.MASP=C.MASP and C.MAPX=P.MAPX and TENSP like Ten and extract(year from
NGAYLAP)=Nam
group by C.MASP;
if (SLXuat = 0) then SLXuat:=0;


end if;
return SLXuat;

end;
--Test
select F1('Xi măng', 2016) from dual;
select F1('Xi măng', 2018) from dual;

select sum(nvl(SOLUONG,0)) AS SOLUONG
from SANPHAM S, CHITIETXUAT C, PHIEUXUAT P
where S.MASP=C.MASP and C.MAPX=P.MAPX and TENSP like 'Xi măng'
and extract(year from NGAYLAP)=2016
group by C.MASP;
--2



×