Bài giảng Cơ sở dữ liệu: Hàm do người dùng định nghĩa trình bày các khái niệm, các loại hàm, định nghĩa hàm vô hướng, ví dụ về hàm, định nghĩa hàm trả về bảng, khác nhau giữa hàm và thủ tục, định nghĩa view,... Mời các bạn cùng tham khảo.
HÀM DO NGƯỜI DÙNG ĐỊNH NGHĨA (USER-DEFINED FUNCTION) KHÁI NIỆM • Là đối tượng CSDL • Có hai loại hàm: – Hàm hệ quản trị CSDL cung cấp sẵn – Hàm người dùng tự định nghĩa để phục vụ cho mục đích riêng • Có thể sử dụng hàm biểu thức tính tốn CÁC LOẠI HÀM • Hàm vơ hướng: trả giá trị • Hàm thao tác ghi: trả bảng ĐỊNH NGHĨA HÀM VÔ HƯỚNG • Cú pháp: VÍ DỤ VỀ HÀM • Ví dụ hàm vơ hướng: viết hàm để tính số lượng nhân viên phòng CREATE FUNCTION Ham_Soluong_Phong ( @BienMaPhong CHAR (3) ) RETURNS int AS BEGIN DECLARE @SL int; SELECT @SL = COUNT (*) FROM NhanVien WHERE MaPhong=@BienMaPhong ; RETURN (@SL); END VÍ DỤ VỀ HÀM Sử dụng hàm: SELECT Ham_Soluong_Phong('KD'); SELECT MaPhong, count (*) FROM NhanVien GROUP BY MaPhong HAVING count(*) > Ham_Soluong_Phong('QT') ĐỊNH NGHĨA HÀM TRẢ VỀ BẢNG • Cú pháp 1: CREATE FUNCTION Tên_hàm ([tham số]) RETURNS TABLE BEGIN Các câu lệnh END ĐỊNH NGHĨA HÀM TRẢ VỀ BẢNG • Ví dụ 1: viết hàm để trả danh sách nhân viên phòng CREATE FUNCTION HAM_DSPHONG (@bienmaphong char(5)) RETURNS TABLE AS BEGIN RETURN (SELECT MANV, HOTEN, DIACHI FROM NHANVIEN WHERE MAPHONG=@bienmaphong) END • Ví dụ 2: Viết hàm trả ngày sinh nhân viên Tham số hàm mã nhân viên • Viết thủ tục sử dụng hàm so sánh ngày sinh hai nhân viên Nếu trùng in “Hai nhân viên ngày sinh” Ngược lại in “Hai nhân vien khơng ngày sinh” VÍ DỤ VỀ HÀM • Sử dụng hàm HAM_DSPHONG: • SELECT * FROM HAM_DSPHONG(‘QT’) KHÁI NIỆM • Là stored procedure đặc biệt • Trigger tham số đầu vào, đầu • Trigger tự động chạy có hành động liên quan đến xảy • Sử dụng việc: – Kiểm tra liệu nhập – Tính tốn, cập nhật giá trị tự động • Các loại trigger: INSERT TRIGGER, DELETE TRIGGER, UPDATE TRIGGER, TRIGGER tổng hợp Cú pháp CREATE TRIGGER ON | FOR | AFTER| INSTEAD OF AS Trigger chèn: ví dụ CREATE TRIGGER trInsNV ON NHANVIEN FOR INSERT AS PRINT ‘Ban da chen cong’ Trigger tự động thực có ghi chèn vào bảng NHANVIEN Trigger xóa: ví dụ CREATE TRIGGER trDelNV ON NHANVIEN FOR DELETE AS PRINT ‘Ban da xoa cong’ Trigger tự động thực có nhiều ghi bị xóa bảng NHANVIEN Trigger cập nhật (Update trigger): ví dụ CREATE TRIGGER trUpNV ON NHANVIEN FOR UPDATE AS PRINT ‘Ban da cap nhat cong’ Trigger tự động thực có câu lệnh Update thực bảng NHANVIEN Trigger tổng hợp: ví dụ CREATE TRIGGER trIns_UpNV ON NHANVIEN FOR INSERT, UPDATE AS RAISERROR('%d hàng thêm sửa bảng NHANVIEN', 0, 1,@@rowcount) Trigger Instead of – cho phép cập nhật DL bảng thơng qua view có liên kết nhiều bảng Xóa, sửa trigger – Xố trigger DROP TRIGGER – Sửa trigger ALTER TRIGGER – Xem lại định nghĩa trigger: sp_helptext – Tạo trigger EM Ứng dụng: Đảm bảo ràng buộc toàn vẹn liệu CREATE TRIGGER trDelNV ON NHANVIEN FOR DELETE AS RAISERROR('%d hang bi xoa bang NHANVIEN', 0, 1,@@rowcount) -CREATE TRIGGER trDelPhong ON PHONG FOR DELETE AS DELETE NHANVIEN FROM DELETED WHERE DELETED.MAPHONG =NHANVIEN.MAPHONG Một số ý dùng trigger – Một bảng có nhiều trigger – Mỗi trigger có tên – Trong trigger thường dùng mệnh đề IF EXISTS Viết trigger không cho phép thêm nhân viên tuổi >60 Viết trigger không cho phép cập nhật bảng NHANVIEN số lượng ghi cập nhật >3 Viết trigger để đảm bảo lương nhân viên không phép thay đổi giá trị >1000 Viết trigger để đảm bảo khơng phép xóa nhân viên trưởng phòng Trong CSDL QLNV, tạo view chứa thông tin sau: MaNv, TenNV, MaP TenP Tạo view cho biết mức lương trung bình phòng Sử dụng view câu 1để tìm xem phòngnào có số nhân viên đơng • CREATE sp_configure 'nested trigger', Create trigger casc_del on Phong for delete as delete Nhanvien from deleted, nhanvien where deleted.MaPhong=nhanvien.map create trigger del_NV on Nhanvien for delete as select * from Phong select * from Nhanvien • CSDL NHANVIEN gồm bảng: NHANVIEN (MaNV, TenNV, Ngaysinh, Luong, MATP) PHONG (MaP, TenP, SoLuong) ... loại hàm: – Hàm hệ quản trị CSDL cung cấp sẵn – Hàm người dùng tự định nghĩa để phục vụ cho mục đích riêng • Có thể sử dụng hàm biểu thức tính tốn CÁC LOẠI HÀM • Hàm vơ hướng: trả giá trị • Hàm. .. sinh” VÍ DỤ VỀ HÀM • Sử dụng hàm HAM_DSPHONG: • SELECT * FROM HAM_DSPHONG(‘QT’) ĐỊNH NGHĨA HÀM TRẢ VỀ BẢNG • Cú pháp ĐỊNH NGHĨA HÀM TRẢ VỀ BẢNG Ví dụ 2: sử dụng cú pháp để viết lại hàm ví dụ 1:... HÀM • Hàm vơ hướng: trả giá trị • Hàm thao tác ghi: trả bảng ĐỊNH NGHĨA HÀM VÔ HƯỚNG • Cú pháp: VÍ DỤ VỀ HÀM • Ví dụ hàm vơ hướng: viết hàm để tính số lượng nhân viên phòng CREATE FUNCTION Ham_Soluong_Phong