Download as pdf or txt
Download as pdf or txt
You are on page 1of 51

LOGO

HỆ QUẢN TRỊ CSDL


Số tc: 3 (2 Lec + 1 Lab)

Giảng viên: Lương Thị Thu Phương


Phone: 0935 512 766
Email: luongthuphuongitdtu@gmail.com
Chương 3: VIEW – PROCEDURE - TRIGGER

VIEW

Một khung nhìn VIEW là một bảng ảo trong cơ sở dữ liệu có


nội dung được định nghĩa thông qua một câu lệnh SQL nào đó.
Một VIEW bao gồm các hàng và cột giống như một bảng
thực.

VIEW không được xem là một cấu trúc lưu trữ dữ liệu tồn tại
trong cơ sở dữ liệu.

www.themegallery.com
Chương 3: VIEW – PROCEDURE - TRIGGER

VIEW

CREATE VIEW <tên_view> AS


SELECT cột1, cột2, .....
FROM <tên_bảng|ds bảng>
[WHERE <điều_kiện>];
Chương 3: VIEW – PROCEDURE - TRIGGER

Ví dụ: Tạo View Thành Tiền: MAHD, NGAYHD, NGAYGH,


TENHANG, SLBAN, DONGIA, THANHTIEN

CREATE VIEW THANHTINEN AS


SELECT HOADON.MAHD, NGAYHD, NGAYGH, TENHANG, SLBAN,
DONGIA, (SLBAN*DONGIA) AS THANH TIEN
FROM HOADON, CHITIET, DMHANG
WHERE HOADON.MAHD = CHITIET.MAHD
AND DMHANG.MAHANG = CHITIET.MAHANG;

www.themegallery.com
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

Procedure (Thủ tục) là một chương trình trong cơ sở dữ liệu


gồm nhiều câu lệnh SQL mà ta có thể lưu lại để sử dụng cho
những lần sau.

Một Procedure có thể được thiết kế để nhận các tham số đầu


vào hoặc giá trị mặc định để sử dụng trong quá trình thực thi.
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

Create Procedure <Pro_Name>


AS
BEGIN
<SQL Statement>
END;
www.themegallery.com
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

Ví dụ 1: Tạo Procedure không có điều kiện


CREATE PROCEDURE PRO_DMHANGG
AS
DMHANG
BEGIN
SELECT *
FROM DMHANG
ORDER BY MAHANG
END;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

Ví dụ 2: Tạo Procedure có điều kiện


CREATE PROCEDURE PRO_DMHANG
AS
DMHANG
BEGIN
SELECT *
FROM DMHANG
WHERE SLNHAP >= 30
ORDER BY MAHANG
END;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

EXECUTE PRO_Name;

Hoặc

EXEC PRO_Name;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

ALTER PROCEDURE <Pro_Name>


AS
BEGIN
<SQL Statement>
END;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

DROP PROCEDURE <Pro_Name>;


# Hoặc
DROP PROC <Pro_Name>;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

6 - Tạo Procedure với tham số đầu vào

Tham số đầu vào: Trong Procedure có tham số đầu vào, các giá
trị được truyền vào từ bên ngoài và được sử dụng trong quá
trình thực thi của Procedure.

Khi gọi Procedure này, phải cung cấp giá trị cho các tham số
này.
www.themegallery.com
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

6 - Tạo Procedure với tham số đầu vào

Create Procedure <Procedure_Name>


(@param_name_1 param_type_1,
----------------------
@param_name_n param_type_n)
As
Begin
<SQL Statement>
END;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

VD1: Tạo Stored procedure với 1 tham số đầu vào

CREATE PROCEDURE SELECT_MAHANG


(@MAHANG VARCHAR(5)) DMHANG
AS
BEGIN
SELECT *
FROM DMHANG
WHERE MAHANG = @MAHANG
END;

EXEC SELECT_MAHANG ‘MH01’;


Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

VD2: Tạo Stored Procedure với nhiều tham số đầu vào

CREATE PROCEDURE SELECT_MAHANG_MANCC


(@MAHANG VARCHAR(5), @MANCC VARCHAR(5))
AS
BEGIN
SELECT *
FROM NHACUNGCAP
WHERE MAHANG = @MAHANG AND MANCC = @MANCC
END;
EXEC SELECT_MAHANG_MANCC @MAHANG ='MH02', @MANCC='CC01';
Hoặc: EXEC SELECT_MAHANG_MANCC ‘MH02’, ‘CC01’;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

7 - Tạo Procedure với tham số mặc định


CREATE PROC SOMATHANG_HOADON
@MAHD VARCHAR(5) = 'HD01'
AS
BEGIN
DECLARE @SOMATHANG INT
SELECT @SOMATHANG = COUNT(*)
FROM CHITIET
WHERE MAHD = @MAHD
--
PRINT N'Số MẶT HÀNG: ' + STR(@SOMATHANG)
END;
EXEC SOMATHANG_HOADON
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

Thực hiện Procedure với lệnh UPDATE

Ví dụ: Update không có điều kiện


Ví dụ: Update có điều kiện
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

1. Tạo Procedure với tham số đầu vào là MAHD, LOAI hiển thị danh sách các hóa
đơn: MAHD, NGAYHD, NGAYGH.
2. Tạo Procedure với tham số đầu vào là Tháng của NGAYHD, Tháng của
NGAYGH hiển thị danh sách: MAKH, TENKH, MAHD, NGAYHD, NGAYGH.
3. Tạo Procedure với tham số đầu vào là MAKH hiển thị số lượng hóa đơn của mỗi
khách hàng.
4. Tạo Procedure cập nhật SLTON cho mặt hàng có mã là MH01 tăng thêm 10.
5. Tạo Procedure có tham số đầu vào là MAHANG, SLTON cập nhật SLTON cho
mặt hàng bất kỳ khi được truyền tham số.
Tên file: IS401 T_26012024_MASV Nộp bài vào chat zoom
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

8 - Tạo Procedure với tham số đầu ra OUTPUT

Tham số OUTPUT trong Procedure là các biến đặc biệt, được


sử dụng để lưu trữ giá trị trả về từ Procedure.

Khi Procedure được thực thi, giá trị của các tham số OUTPUT
này sẽ được gán và trả về cho việc gọi thủ tục.

Tham số OUTPUT có thể được khai báo trong Procedure bằng


cách sử dụng từ khóa OUTPUT.
www.themegallery.com
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

8 - Tạo Procedure với tham số đầu ra OUTPUT

Ví dụ 1:
CREATE PROCEDURE SLHOADON_KHACHHANG
@MAKH Char(5),
@SLHOADON INT OUTPUT
AS
BEGIN
SELECT @SLHOADON = COUNT(*)
FROM HOADON
WHERE MAKH = @MAKH
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

8 - Tạo Procedure với tham số đầu ra OUTPUT

//Thực Thi Procedure//

DECLARE @THONGKE INT;

EXEC SLHOADON_KHACHHANG

@MAKH = 'KH01',

@SLHOADON = @THONGKE OUTPUT;

SELECT @THONGKE AS SLHOADON;


Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

8 - Tạo Procedure với tham số OUTPUT

Chú ý: khi sử dụng tham số OUTPUT, ta phải khai báo kiểu


dữ liệu cho tham số này, và giá trị của tham số OUTPUT sẽ
được gán bởi câu lệnh SELECT trong Procedure.

www.themegallery.com
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

9 - Tạo Procedure với tham số OUTPUT là số dòng thỏa mãn điều kiện
Ví dụ 2: Tạo thủ tục thống kê số hàng có SLTON >=X
CREATE PROCEDURE SELECT_SLTON
(@SLTON INT, @SOHANG_COUNT INT OUTPUT)
AS
Gán số lượng bản ghi
BEGIN
được trả về cho tham số
SELECT *
FROM DMHANG
WHERE SLTON>= @SLTON;
SELECT @SOHANG_COUNT = @@ROWCOUNT; Là 1 biến HT trả về số record
END; được đọc ở câu lệnh phía trước
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

Thực thi Procedure với tham số OUTPUT thõa mãn điều kiện

DECLARE @COUNT INT;


EXEC SELECT_SLTON
@SLTON = 80,
@SOHANG_COUNT = @COUNT OUTPUT;
SELECT @COUNT AS SOHANG;

Chú ý: Nếu không khai báo OUTPUT sau biến @COUNT thì giá trị của
biến @COUNT sẽ là NULL .
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

Tham số đầu ra là những giá trị được trả về từ thủ tục sau khi
nó được gọi.
Chức năng chính của tham số đầu ra là cung cấp kết quả hoặc
thông tin từ thủ tục cho phần gọi thủ tục.
Tham số đầu ra có thể được sử dụng để trả về giá trị tính toán
dữ liệu từ cơ sở dữ liệu.
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

10. Tạo Procedure thêm dữ liệu mới vào Table

CREATE PROCEDURE Insert_data


@column1 datatype1,
----------------
@columnN datatypeN
AS
BEGIN
<SQL Statement>
END;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

10. Tạo Procedure thêm dữ liệu mới vào Table


Ví dụ 1: Tạo Procedure thêm mới dữ liệu vào bảng DMHANG

CREATE PROCEDURE Insert_ DMHANG


@MAHANG Varchar(5), @TENHANG NVarchar(20),
@DVT NVarchar(5), @SLTON INT, @MANCC Varchar(5)
AS
BEGIN
INSERT INTO DMHANG
VALUES (@MAHANG, @TENHANG, @DVT, @SLTON, @MANCC)
END;
EXEC Insert_DMHANG 'MH08', N‘Cà fe sữa gói',‘hộp', 10,'CC04'
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

11. Tạo Procedure Update dữ liệu của Table

CREATE PROCEDURE <Pro_Name>


AS
BEGIN
Update <Table_name>
SET <tên_cột> = <Biểu thức>
[Where <Điều kiện>];
END; EXEC <Pro_name>;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

11. Tạo Procedure Update dữ liệu của Table

Ví dụ 1: Tạo Procedure cập nhật SLNHAP của mã hàng MH01 tăng thêm 5

CREATE PROCEDURE Update_SLNHAP


AS
BEGIN
UPDATE DMHANG
SET SLNHAP = SLNHAP + 5
WHERE MAHANG = 'MH01';
END;
EXEC increase_SLNHAP;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

Tạo Procedure Update dữ liệu của Table có tham số đầu vào

CREATE PROCEDURE Update_data


@column1 datatype1,
----------------
@columnN datatypeN
AS
BEGIN
Update <Table_name> SET <tên_cột1> = @tên_cột1, ......
Where <tên_cột1> = @tên_cột1, .......;
END;
www.themegallery.com
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

Tạo Procedure Update dữ liệu của Table có tham số đầu vào

CREATE PROCEDURE Update_SLNHAP


@MAHANG Char(5),
@SLNHAP INT
AS
BEGIN
UPDATE DMHANG
SET SLNHAP = @SLNHAP
WHERE MAHANG = @MAHANG;
END;
EXEC Update_SLNHAP @MAHANG = 'MH02', @SLNHAP = 15;
Chương 3: VIEW – PROCEDURE - TRIGGER

PROCEDURE

11. Tạo Procedure Update dữ liệu của Table

 Sử dụng câu lệnh UPDATE để cập nhật dữ liệu trong bảng.


 Sử dụng tham số đầu vào để truyền giá trị cập nhật cho các
cột trong bảng.
 Chú ý rằng các tên cột, tên bảng và tên tham số phải được
đặt đúng tên và kiểu dữ liệu.

www.themegallery.com
Chương 3: VIEW – PROCEDURE - TRIGGER

Thực hiện các yêu cầu sau: IS 401 X_31012024_HOTEN_MASV


1. Tạo Procedure có tham số đầu vào là MAHD có tham số đầu ra là
số mặt hàng trên mỗi hóa đơn?
2. Tạo Procedure có tham số đầu vào là MAHD có tham số đầu ra là
số mặt hàng có SLBAN>=X?
3. Tạo Procedure nhập thêm dữ liệu mới vào bảng KHACHHANG
4. Tạo Procedure có tham số đầu ra là số lượng hóa đơn giao hàng
của mỗi Tháng?
5. Tạo thủ tục thống kê và in ra số lượng hóa đơn theo từng loại hóa
đơn Mua (M), hóa đơn Bán (B).
REVIEW PROCERDURE

1. Khái niệm Procedure?


2. Tạo Procedure: CREATE
3. Chỉnh sửa Procedure: ALTER
4. Xóa: DROP
5. Tạo Procedure: không có tham số, có tham số
đầu vào, có tham số đầu ra, thêm dữ liệu mới
vào Table, cập nhật lại dữ liệu cho Table.

www.themegallery.com
REVIEW PROCERDURE
Database: QUAN LY DIEM SINH VIEN
KHOA (MAKHOA, TENKHOA)
LOP (MALOP, TENLOP, MAKHOA)
SINHVIEN (MASV, HOTEN, NGAYSINH, PHAI, QUEQUAN, MALOP)
MONHOC (MAMH, TENMH, SOTC)
KQHT (MASV, MAMH, DIEM)
Yêu cầu:
1. Tạo Procedure cho biết số lớp của mỗi khoa?
2. Tạo Procedure cho biết số sinh viên của mỗi lớp?
3. Tạo Procedure thống kê tổng số tín chỉ của mỗi sinh viên?
4. Tạo Procedure thống kê số SV nam, nữ của mỗi lớp?

www.themegallery.com
Chương 3: VIEW – PROCEDURE - TRIGGER

TRIGGER

1. Trigger là gì ?

Trigger là một đối tượng trong cơ sở dữ liệu được thiết lập để thực
hiện một hoặc nhiều hành động trong cơ sở dữ liệu khi có sự kiện
xảy ra.
Trigger thực thi một cách tự động khi một trong ba câu lệnh Insert,
Update, Delete làm thay đổi dữ liệu trên bảng có chứa trigger.
Trigger thường được sử dụng để kiểm tra tính hợp lệ của dữ liệu khi
thêm, sửa hoặc xóa dữ liệu trong cơ sở dữ liệu.
Chương 3: VIEW – PROCEDURE - TRIGGER

TRIGGER

Tạo Trigger
CREATE TRIGGER <Trigger_Name>
ON <Table_Name>
FOR {INSERT | DELETE | UPDATE}
AS
BEGIN
<SQL Satement>
END;
Chương 3: VIEW – PROCEDURE - TRIGGER

TRIGGER

 Trigger thường được sử dụng để kiểm tra ràng buộc (check


constraints) trên nhiều Table hoặc trên nhiều dòng của
bảng.
 Vai trò của Trigger trong CSDL là tính nhất quán dữ liệu.
Chương 3: VIEW – PROCEDURE - TRIGGER

TRIGGER

Khi trigger được thực hiện, SQL tự động tạo ra 2 bảng tạm
với cùng cấu trúc với bảng chứa trigger.
 INSERTED chứa dữ liệu mới khi chúng ta thực thi câu
lệnh Insert hoặc câu lệnh Update.
• DELETED chứa những bản ghi bị xoá khi chúng ta thực
thi câu lệnh Delete hoặc chứa dữ liệu cũ khi chúng ta thực
thi câu lệnh Update.
Chương 3: VIEW – PROCEDURE - TRIGGER

TRIGGER
Chương 3: VIEW – PROCEDURE - TRIGGER

TRIGGER

www.themegallery.com
Chương 3: VIEW – PROCEDURE - TRIGGER
Chương 3: VIEW – PROCEDURE - TRIGGER

TRIGGER

Ví dụ:

Khi có khách đặt hàng thì tự động cập nhật lại SLNHAP
trong bảng DMHANG.
Chương 3: VIEW – PROCEDURE - TRIGGER

TRIGGER
Giải pháp:

Khi khách đặt hàng ta chỉ có 3 loại thao tác chính với CSDL là :
Insert, Delete, Update  // Tạo 3 trigger.

 Khách đặt hàng:


Số lượng nhập = Số lượng nhập - Số lượt đặt
 Khách hủy không đặt hàng nữa:
Số lượng nhập = Số lượng nhập + Số lượt đặt
 Khách cập nhật số lượng đặt
Chương 3: VIEW – PROCEDURE - TRIGGER

TRIGGER

1. Trong Database, Tạo mới Table DATHANG (không nhập DL).


2. Chạy Diagram cho Table mới DATHANG.
3. Giả sử đặt hàng với SoluongDat: X SP mặt hàng MH01  Insert
4. Hủy đặt hàng với MH01  Delete
5. Cập nhật lại đặt hàng thêm X SP với MH01  Update
Chương 3: VIEW – PROCEDURE - TRIGGER
//*Đặt hàng
CREATE TRIGGER trg_DatHang
ON DATHANG
FOR INSERT
AS
BEGIN
UPDATE DMHANG
SET SLNHAP = SLNHAP - (SELECT SOLUONGDAT FROM inserted
WHERE MAHANG = DMHANG.MaHang)
FROM DMHANG JOIN inserted ON DMHANG.MaHang = inserted.MaHang
END;
GO

INSERT INTO DATHANG VALUES ('DH01', 'MH01', 10);


Chương 3: VIEW – PROCEDURE - TRIGGER

//* Hủy đặt hàng


CREATE TRIGGER trg_HuyDatHang
ON DATHANG
FOR DELETE
AS
BEGIN
UPDATE DMHANG
SET SLNHAP = SLNHAP + (SELECT SL=SOLUONGDAT
FROM deleted WHERE MaHang = DMHANG.MaHang)
FROM DMHANG
JOIN deleted ON DMHANG.MaHang = deleted.MaHang
END;
GO
DELETE FROM DATHANG
WHERE MAHANG = 'MH01';
Chương 3: VIEW – PROCEDURE - TRIGGER

//* cập nhật đặt hàng

CREATE TRIGGER trg_CapNhatDatHang


ON DATHANG
FOR UPDATE
AS
BEGIN
UPDATE DMHANG SET SLNHAP = SLNHAP -
(SELECT SOLUONGDAT FROM inserted WHERE MaHang =
DMHANG.MaHang) +
(SELECT SOLUONGDAT FROM deleted WHERE MaHang =
DMHANG.MaHang)
FROM DMHANG
JOIN deleted ON DMHANG.MaHang = deleted.MaHang
END;
GO UPDATE DATHANG
SET SOLUONGDAT = 10
WHERE MAHANG = 'MH01';
Chương 3: VIEW – PROCEDURE - TRIGGER

TRIGGER

Chú ý: Cần phải thiết lập các chính sách bảo mật rõ ràng để giữ an
toàn cho các trigger, chẳng hạn như: giới hạn các quyền thực thi và xử
lý truy cập cho các trigger.
Các trigger cũng nên được mã hóa để người dùng không thể truy cập
trực tiếp vào mã nguồn của chúng.
Các biện pháp bảo mật như kiểm tra đầu vào và đầu ra cũng cần được
áp dụng để đảm bảo rằng các trigger không bị lỗ hổng bảo mật.
TRIGGER CÓ SỬ DỤNG
IF.....ELSE
CREATE TRIGGER trigger_name
ON table_name
FOR INSERT
AS
BEGIN
IF <condition>
BEGIN
-- Do something if condition is true
END
ELSE
BEGIN
-- Do something if condition is false
END
END;
TRIGGER CÓ SỬ DỤNG
IF.....ELSE
CREATE TRIGGER trg_DatHangĐK
IF @slnhap >= @soluongdat
ON DATHANG
BEGIN
FOR INSERT
UPDATE DMHANG
AS
SET SLNHAP = @slnhap -
BEGIN
@soluongdat
DECLARE @madonhang CHAR(10),
WHERE MAHANG = @mahang
@mahang CHAR(5), @soluongdat INT,
END
@slnhap INT
ELSE
BEGIN
SELECT @mahang = MAHANG,
PRINT(N'Số lượng đặt vượt quá số
@soluongdat = SOLUONGDAT,
lượng nhập!!! Không thực hiện được')
@madonhang = MADONHANG
ROLLBACK
FROM inserted
END
END;
SELECT @slnhap = SLNHAP
FROM DMHANG
WHERE MAHANG = @mahang

You might also like