SlideShare a Scribd company logo
View sp trigger_udf
NỘI DUNG
   KHUNG NHÌN (VIEW)
   THỦ TỤC LƯU TRÚ (STORED PROCEDURE - SP)
   TRIGGER
   HÀM CỦA NGƯỜI DÙNG (USER DEFINED
    FUNCTION - UDF)
View sp trigger_udf
NỘI DUNG
   Định nghĩa
   Câu lệnh
   Mục đích
   Cập nhật dữ liệu thông qua View
   Mã hóa View
Định nghĩa VIEW

 View là bảng không chứa dữ liệu, nó chỉ là truy
  vấn kết hợp dữ liệu từ 1 hay nhiều bảng có quan
  hệ với nhau và được lưu thành một đối tượng của
  SQL SV
 NSD có thể áp dụng ngôn ngữ thao tác dữ liệu

  trên các View giống như Table.
Định nghĩa VIEW


                                  SQL Server


SELECT   *
FROM         nv_kinhdoanh;
                                   USER_VIEWS
                                     nv_kinhdoanh
                             SELECT manv, hoten,luong
                             FROM   NHANVIEN
                             WHERE ma_phong = ‘KDA’;


                                  NHANVIEN
Câu lệnh tạo VIEW

CREATE VIEW <Tên_View>
                 [(<danh sách tên cột>) ]
[WITH ENCRYPTION]
AS
<Câu lệnh SELECT>
[with check option]
Câu lệnh tạo VIEW

Ví dụ 1: tạo View nv_kinh doanh

CREAT VIEW nv_kinhdoanh
AS
 SELECT Manv, Hoten, Luong
 FROM NHANVIEN

* Sử dụng View:
SELECT * FROM NV_KINHDOANH
Câu lệnh tạo VIEW

Ví dụ 2: tạo View nv_tre (nhân viên dưới 35 tuổi)

CREAT VIEW nv_tre (Manv, Hoten, Tuoi)
AS
 SELECT Manv, Hoten, Year(Getdate()) – Year(Ngaysinh)
 FROM NHANVIEN
 WHERE Year(Getdate()) – Year(Ngaysinh) <= 35

* Sử dụng View:
SELECT * FROM NV_TRE
 Nếu một thuộc tính trong View được xây dựng từ một
  biểu thức thì bắt buộc phải đặt tên cho thuộc tính đó.
Mục đích dùng VIEW

 Hạn chế tính phức tạp của dữ liệu đối với NSD
  đơn giản.
 Tạo ra bảng ảo có dữ liệu theo yêu cầu cho NSD

  và sử dụng trong thiết kế báo cáo.
 Hạn chế quyền truy cập dữ liệu của NSD.

 View dùng để trình bày các thông tin dẫn xuất.
Cập nhật dữ liệu thông qua View
  View định nghĩa dữ liệu trên một bảng thì
   có thể dùng Insert
  Nếu trong định nghĩa View có chứa mệnh

   đề Inner join thì không thể dùng các thao tác
   Insert hay Delete để thay đổi dữ liệu
  Nếu trong định nghĩa View có chứa mệnh

   đề With check option thì chỉ những bản ghi
   thỏa mãn điều kiện của View mới được
   Insert, Update
Xây dựng View dựa trên View khác
    Khi xóa 1 view, mọi view được xây dựng dựa
     trên view đó cũng bị xóa.
    Có thể dùng thủ tục sp_helptext để xem định
     nghĩaView
    Tạo View bằng EM
     Mã hoá View: dùng WITH ENCRYPTION
         Không thể xem được nội dung View

         Không thể thay đổi lại được
View sp trigger_udf
THỦ TỤC LƯU TRÚ
          (STORED PROCEDURE)
   SP được xây dựng từ các câu lệnh T-SQL và được lưu
    trú trên SQL server.
   Muốn thực hiện một SP, NSD chỉ cần thực hiện một
    lời gọi hàm.
   Khi SP được chạy lần đầu tiên nó sẽ được biên dịch
    qua 5 bước và sinh ra một mô hình truy vấn. Mô hình
    này sẽ được đặt trong một CSDL của SQL server, lần
    sau chạy lại thủ tục sẽ không phải dịch lại nữa.
THỦ TỤC LƯU TRÚ
           (STORED PROCEDURE)
   Năm bước biên dịch thủ tục:
     Thủ tục được phân tích ra thành nhiều phần
     Kiểm tra sự tồn tại của các đối tượng (view, table, …) mà thủ

      tục tham chiếu tới.
     Lưu trữ tên thủ tục vào bảng sysobject, lưu trữ các mã lệnh

      của thủ tục vào bảng syscomments.
     Sinh ra mô hình truy vấn của thủ tục và lưu vào bảng

      sysprocedure
     Khi SP được chạy lần đầu tiên, cây truy vấn sẽ được đọc và

      được tối ưu thành một kế hoạch thủ tục và chạy  tiết kiệm
      thời gian tái phân tích, biên dịch cây truy vấn mỗi khi chạy
      thủ tục.
THỦ TỤC LƯU TRÚ
           (STORED PROCEDURE)
   Trong một phiên làm việc, nếu SP được thực hiện, nó
    sẽ được lưu trữ vào vùng nhớ đệm. Những lần sau nếu
    SP được gọi thực hiện lại thì nó sẽ được đọc trực tiếp
    ra từ vùng nhớ đệm  nâng cao hiệu suất chạy truy
    vấn.
THỦ TỤC LƯU TRÚ
            (STORED PROCEDURE)
   Cú pháp lệnh tạo SP:
CREATE PROC[EDURE] <tên SP>
[@ <tên tham số 1> <kiểu DL>
    [= <giá trị>] [OUTPUT], . . .]
[WITH RECCOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION]
AS
    <các câu lệnh SQL, câu lệnh điều khiển, . . .>
Giải thích:
-   =<giá trị>: gán giá trị ban đầu cho tham số
-   OUTPUT: giá trị thay đổi của tham số ở trong thủ tục được đưa
    ra bên ngoài thủ tục.
Ví dụ
THỦ TỤC LƯU TRÚ
           (STORED PROCEDURE)
   Thực hiện thủ tục:
EXEC <tên SP>
  Thay đổi thủ tục
ALTER PRO[CEDURE] . . .
  Xóa thủ tục
DROP PRO[CEDURE] <tên SP>
   Bó thủ tục
THỦ TỤC LƯU TRÚ
              (STORED PROCEDURE)
   Sử dụng tùy chọn RECOMPILE trong câu lệnh CREATE
    PRO:
     Thủ tục sẽ được biên dịch lại từ đầu mỗi khi thực hiện
     Khi biên dịch lại các thông tin mới của SP được cập nhật và

      tối ưu lại.
   Sử dụng tùy chọn RECOMPILE trong câu lệnh EXEC
       Thủ tục sẽ được biên dịch lại trong lần thực thi đó và lưu lại
        kế hoạch thực thi mới của nó vào vùng nhớ đệm.
  Biên dịch lại tất cả các thủ tục của bảng:
EXEC sp_recompile <tên bảng>
THỦ TỤC LƯU TRÚ
                      (STORED PROCEDURE)

   Ví dụ:
USE qlnv;                      SP này như một view có tham số!
GO
CREATE PROC DS_Phong
@BienMaPhong CHAR (3)
AS
       SELECT Manv, HoTen, NgaySinh
       FROM NhanVien
       WHERE MaPhong=@BienMaPhong
GO

Exec DS_Phong 'KDA'
THỦ TỤC LƯU TRÚ
                             (STORED PROCEDURE)
   Ví dụ:
USE qlnv;
GO
CREATE PROC Soluong_Phong
@BienMaPhong CHAR (3),
@SL int OUTPUT
AS
          SELECT @SL = COUNT (*)
          FROM NhanVien
          WHERE MaPhong=@BienMaPhong
GO
-- Thuc hien thu tuc luu tru
DECLARE @dem INT; DECLARE @phong CHAR(3);
SET @phong='KDA';
EXEC Soluong_Phong @phong, @dem OUTPUT
--Hoac
EXEC Soluong_Phong @BienMaPhong=@phong, @SL=@dem OUTPUT
PRINT 'So luong nhan vien phong ' + @phong + ' la: ' + CAST (@dem AS CHAR(20))
--Xoa thu tuc luu tru
DROP PROC Soluong_Phong
THỦ TỤC LƯU TRÚ
                   (STORED PROCEDURE)

   Ví dụ: (Thu tuc luu tru voi tham so mac dinh)
CREATE PROC Soluong_Phong_Default
@BienMaPhong CHAR (3)='KDA',
@SL int OUTPUT
AS
        SELECT @SL = COUNT (*)
        FROM NhanVien
        WHERE MaPhong=@BienMaPhong
GO

DECLARE @dem INT;
EXEC Soluong_Phong_Default @SL=@dem
EXEC Soluong_Phong_Default 'QTA', @dem
Create proc XepLoaiSV @MaSV varchar(10),
                      THỦ TỤC LƯU TRÚ
                       @DTB float output, @XL nvarchar(20) output
As                  (STORE PROCEDURE)
Set @DTB = (Select avg(Diem) from KetQua Kq
Where MaSV = @MaSV and not exists (
                select * from KetQua Kq1
                where Kq1.MaSV = @MaSV and Kq1.MaMH=Kq.MaMH
                and Kq1.LanThi > Kq.LanThi
                                       )
              )
If @DTB >= 9
         Set @XL = N’Xuât sac’
Else if @DTB >= 8
         Set @XL = N’Gi~i’
Else if @DTB >= 7
         Set @XL = N’Khá’
Else if @DTB >= 5
         Set @XL = N’Trung bình’
Else
         Set @XL = N’Yêu’
Go
View sp trigger_udf
HÀM CỦA NSD
(USER DEFINED FUNCTIONS-UDFs)
  Cú pháp câu lệnh:
CREATE FUNCTION <tên hàm>
([@<tên tham số> <kiểu DL vô hướng> [= <giá trị>] [, . . .]])
RETURNS <kiểu vô hướng>|<table>
[WITH ENCRYPTION]
AS
   BEGIN
         [<các câu lệnh>]
         RETURN <giá trị vô hướng>| (<câu lệnh SELECT>)
HÀM CỦA NSD
           (USER DEFINED FUNCTIONS-UDFs)
--Ham vo huong
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
--Su dung ham (Ham xuat hien trong bieu thuc)
SELECT dbo.Ham_Soluong_Phong('KDA');
SELECT MaPhong, count (*)
FROM NhanVien
GROUP BY MaPhong
HAVING count(*) > dbo.Ham_Soluong_Phong('QTA')
HÀM CỦA NSD
            (USER DEFINED FUNCTIONS-UDFs)

--Ham cho ket qua la mot bang
CREATE FUNCTION Ham_DS_Phong (@BienMaPhong CHAR (3))
RETURNS @kq TABLE (Manv CHAR(5), HoTen NCHAR(40), NgaySinh DATETIME)
BEGIN
          INSERT INTO @kq
          SELECT Manv, HoTen, NgaySinh
          FROM NhanVien
          WHERE MaPhong=@BienMaPhong
          RETURN
END
-- Su dung ham tra ket qua bang nhu la TABLE
SELECT *
FROM Ham_DS_Phong ('QTA')
HÀM CỦA NSD
         (USER DEFINED FUNCTIONS-UDFs)
     UDFs giống như SP nhưng khác ở các điểm sau:

                UDF                             SP


    - Giá trị các tham số không    - Có thể đưa giá trị của tham
       được truyền ra ngoài.          số ra ngoài bằng thuộc tính
    - Trả ra một giá trị bằng mệnh    OUTPUT
       đề RETURN
    - Có thể trả về một giá trị vô - Chỉ trả về kiểu DL giá trị
       hướng hoặc một bảng dữ         kiểu nguyên
       liệu.
View sp trigger_udf
Nội dung

   Khái niệm về trigger
   Câu lệnh tạo trigger
   Các loại trigger
   Ứng dụng của trigger
   Sửa, xóa trigger
Khái niệm về trigger

   Thủ tục lưu trú (Stored Procedure) đặc biệt
   Triger tự động được chạy mỗi khi có một
    hành động liên quan đến nó xảy ra
   Triger không có tham số, không trả ra giá
    trị như SP bình thường.
   Các loại trigger: Insert trigger, Delete
    trigger, Update trigger, trigger tổng hợp.
Cú pháp câu lệnh tạo trigger
CREATE TRIGGER <tên triger>
ON <tên bảng>|<tên view>
[WITH ENCRYPTION]
{
{FOR | AFTER| INSTEAD OF}
  <INSERT [, UPDATE] [, DELETE]>
}
AS
    <câu lệnh SQL>
Trigger chèn (Insert trigger): định nghĩa

    Tự động được thực hiện mỗi khi bản ghi
     mới được chèn vào bảng gắn với nó
    Một bảng tạm Inserted sẽ được sinh ra
    Bản ghi cần chèn sẽ được ghi vào bảng cơ
     sở và bảng Inserted
Trigger chèn: ví dụ

CREATE TRIGGER trInsNV
ON NHANVIEN
FOR INSERT
AS
RAISERROR('%d hang da duoc them vao bang
             NHANVIEN', 0, 1,@@rowcount)
Trigger này tự động được thực hiện mỗi khi có bản
   ghi mới được chèn vào bảng NHANVIEN
Trigger xóa: ví dụ

CREATE TRIGGER trDelNV
ON NHANVIEN
FOR DELETE
AS
RAISERROR('%d hàng bị xóa trong bảng
              NHANVIEN', 0, 1,@@rowcount)
Trigger này tự động được thực hiện mỗi khi có một
   hoặc nhiều bản ghi bị xóa ở bảng NHANVIEN
Trigger cập nhật (Update trigger): ví dụ

 CREATE TRIGGER trUpNV
 ON NHANVIEN
 FOR UPDATE
 AS
 RAISERROR('%d %d hàng đã được sửa ở bảng bảng
            NHANVIEN', 0, 1,@@rowcount)


 Trigger này tự động được thực hiện mỗi khi có một
   câu lệnh Update được thực hiện trên bảng
   NHANVIEN.
Trigger tổng hợp: ví dụ

CREATE TRIGGER trIns_UpNV
ON NHANVIEN
FOR INSERT, UPDATE
AS
RAISERROR('%d hàng đã được thêm hoặc sửa ở
   bảng NHANVIEN', 0, 1,@@rowcount)
Trigger Instead of

   cho phép cập nhật DL các bảng thông qua
    view có liên kết nhiều bảng
Ứng dụng: Đảm bảo ràng buộc toàn vẹn dữ liệu
  CREATE TRIGGER trDelNV
  ON NHANVIEN
  FOR DELETE
  AS
  RAISERROR('%d hang bi xoa trong bang NHANVIEN', 0,
       1,@@rowcount)
  ------------
  CREATE TRIGGER trDelPhong
  ON PHONG
  FOR DELETE
  AS
  DELETE NHANVIEN FROM DELETED WHERE
       DELETED.MAPHONG =NHANVIEN.MAPHONG
Ứng dụng: Đóng gói quy tắc nghiệp vụ

CREATE TRIGGER trInsNV_PHONG
ON NHANVIEN
FOR INSERT
AS
UPDATE PHONG SET SONV = SONV+1
  WHERE PHONG.MAPHONG = (SELECT
  MAPHONG FROM INSERTED)
Một số chú ý khi dùng trigger
   Một bảng có nhiều trigger
   Mỗi một trigger có tên duy nhất
   Trong trigger thường dùng mệnh đề IF
    EXISTS
Xóa, sửa trigger

   Xoá trigger
        DROP TRIGGER <tên trigger>
   Sửa trigger
        ALTER TRIGGER <tên trigger> . . .

   Xem lại định nghĩa của trigger: sp_helptext

   Tạo trigger bằng EM

More Related Content

PDF
Stored procedure
PDF
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
PPTX
Cursor & Function trong SQL Server
PPTX
Trigger, Cursor, Function in SQL Server
DOC
Qtu.vn sql - chuong 7
PDF
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
PDF
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT
PDF
Store procedure
Stored procedure
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
Cursor & Function trong SQL Server
Trigger, Cursor, Function in SQL Server
Qtu.vn sql - chuong 7
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT
Store procedure

What's hot (19)

PDF
Bài 3: Làm việc với kiểu dữ liệu và mã kịch bản - Giáo trình FPT
ODP
Android Nâng cao-Bài 8-JSON & XML Parsing
DOCX
Tip oracle
PDF
9 bash
PPT
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 5
ODP
Android Nâng cao-Bài 4: Content Provider
PDF
Lap trinh giao dien nguoi dung voi Java
PDF
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
PDF
Bài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPT
PDF
Bài 2: Biến và toán tử - Giáo trình FPT
PDF
Cai tien trong lenh t sql cua sql server 2008 (2)
PPT
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3 VIEW
PDF
3. phan quyen trong sql server 01012010
PDF
Sql understanding
PDF
Lap trinhcosodulieuvoi c-sharp_phan-3
PDF
Lớp kết nối csdl dùng jdbc trong java
PPT
nngu sql
PPT
07 trigger view
PDF
Subcaption help
Bài 3: Làm việc với kiểu dữ liệu và mã kịch bản - Giáo trình FPT
Android Nâng cao-Bài 8-JSON & XML Parsing
Tip oracle
9 bash
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 5
Android Nâng cao-Bài 4: Content Provider
Lap trinh giao dien nguoi dung voi Java
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 3: Cấu trúc điều khiển, hàm và xử lý sự kiện - Giáo trình FPT
Bài 2: Biến và toán tử - Giáo trình FPT
Cai tien trong lenh t sql cua sql server 2008 (2)
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3 VIEW
3. phan quyen trong sql server 01012010
Sql understanding
Lap trinhcosodulieuvoi c-sharp_phan-3
Lớp kết nối csdl dùng jdbc trong java
nngu sql
07 trigger view
Subcaption help
Ad

Similar to View sp trigger_udf (20)

PPT
slide_Chuong 3_ (1).ppt
PPTX
ORACLE_ch2_SQL.pptx
PPTX
HQCSDL_ThuTucaaaaaaaaaaaaaaaaaaaâdâdáwww
PDF
Chuong 4 - SQL - University of Information Technology.pdf
DOC
New microsoft word document
PDF
B4-ThuTuc_h-HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU - DVG
PDF
B2 - DDL - HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU - DVG
PPT
2_Co ban ve SQL oracle trên oracle sql.ppt
PDF
Tối ưu-cau-lệnh-oracle-sql
PDF
Hdth07 ltudql02-linq-ep1
PDF
Storedprocedure 140411073406-phpapp02
PDF
C4.SQL-LapTrinhT_SQL.pdfddadadsadadsdadd
DOCX
bai in.docx
PDF
ôn tập dbms
PDF
b6-190213084710.pdf
PPT
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
PPT
Thiet Ke Co So Du Lieu2
PPT
Giới thiệu hệ quản trị csdl oracle và thủ tục
PDF
Co So du lieu chuong 4 truong Dai Hoc hcm
PPTX
Phân tích thiết kế cơ sở dữ liệu cho bài toán quản lý
slide_Chuong 3_ (1).ppt
ORACLE_ch2_SQL.pptx
HQCSDL_ThuTucaaaaaaaaaaaaaaaaaaaâdâdáwww
Chuong 4 - SQL - University of Information Technology.pdf
New microsoft word document
B4-ThuTuc_h-HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU - DVG
B2 - DDL - HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU - DVG
2_Co ban ve SQL oracle trên oracle sql.ppt
Tối ưu-cau-lệnh-oracle-sql
Hdth07 ltudql02-linq-ep1
Storedprocedure 140411073406-phpapp02
C4.SQL-LapTrinhT_SQL.pdfddadadsadadsdadd
bai in.docx
ôn tập dbms
b6-190213084710.pdf
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
Thiet Ke Co So Du Lieu2
Giới thiệu hệ quản trị csdl oracle và thủ tục
Co So du lieu chuong 4 truong Dai Hoc hcm
Phân tích thiết kế cơ sở dữ liệu cho bài toán quản lý
Ad

View sp trigger_udf

  • 2. NỘI DUNG  KHUNG NHÌN (VIEW)  THỦ TỤC LƯU TRÚ (STORED PROCEDURE - SP)  TRIGGER  HÀM CỦA NGƯỜI DÙNG (USER DEFINED FUNCTION - UDF)
  • 4. NỘI DUNG  Định nghĩa  Câu lệnh  Mục đích  Cập nhật dữ liệu thông qua View  Mã hóa View
  • 5. Định nghĩa VIEW  View là bảng không chứa dữ liệu, nó chỉ là truy vấn kết hợp dữ liệu từ 1 hay nhiều bảng có quan hệ với nhau và được lưu thành một đối tượng của SQL SV  NSD có thể áp dụng ngôn ngữ thao tác dữ liệu trên các View giống như Table.
  • 6. Định nghĩa VIEW SQL Server SELECT * FROM nv_kinhdoanh; USER_VIEWS nv_kinhdoanh SELECT manv, hoten,luong FROM NHANVIEN WHERE ma_phong = ‘KDA’; NHANVIEN
  • 7. Câu lệnh tạo VIEW CREATE VIEW <Tên_View> [(<danh sách tên cột>) ] [WITH ENCRYPTION] AS <Câu lệnh SELECT> [with check option]
  • 8. Câu lệnh tạo VIEW Ví dụ 1: tạo View nv_kinh doanh CREAT VIEW nv_kinhdoanh AS SELECT Manv, Hoten, Luong FROM NHANVIEN * Sử dụng View: SELECT * FROM NV_KINHDOANH
  • 9. Câu lệnh tạo VIEW Ví dụ 2: tạo View nv_tre (nhân viên dưới 35 tuổi) CREAT VIEW nv_tre (Manv, Hoten, Tuoi) AS SELECT Manv, Hoten, Year(Getdate()) – Year(Ngaysinh) FROM NHANVIEN WHERE Year(Getdate()) – Year(Ngaysinh) <= 35 * Sử dụng View: SELECT * FROM NV_TRE  Nếu một thuộc tính trong View được xây dựng từ một biểu thức thì bắt buộc phải đặt tên cho thuộc tính đó.
  • 10. Mục đích dùng VIEW  Hạn chế tính phức tạp của dữ liệu đối với NSD đơn giản.  Tạo ra bảng ảo có dữ liệu theo yêu cầu cho NSD và sử dụng trong thiết kế báo cáo.  Hạn chế quyền truy cập dữ liệu của NSD.  View dùng để trình bày các thông tin dẫn xuất.
  • 11. Cập nhật dữ liệu thông qua View  View định nghĩa dữ liệu trên một bảng thì có thể dùng Insert  Nếu trong định nghĩa View có chứa mệnh đề Inner join thì không thể dùng các thao tác Insert hay Delete để thay đổi dữ liệu  Nếu trong định nghĩa View có chứa mệnh đề With check option thì chỉ những bản ghi thỏa mãn điều kiện của View mới được Insert, Update
  • 12. Xây dựng View dựa trên View khác  Khi xóa 1 view, mọi view được xây dựng dựa trên view đó cũng bị xóa.  Có thể dùng thủ tục sp_helptext để xem định nghĩaView  Tạo View bằng EM  Mã hoá View: dùng WITH ENCRYPTION  Không thể xem được nội dung View  Không thể thay đổi lại được
  • 14. THỦ TỤC LƯU TRÚ (STORED PROCEDURE)  SP được xây dựng từ các câu lệnh T-SQL và được lưu trú trên SQL server.  Muốn thực hiện một SP, NSD chỉ cần thực hiện một lời gọi hàm.  Khi SP được chạy lần đầu tiên nó sẽ được biên dịch qua 5 bước và sinh ra một mô hình truy vấn. Mô hình này sẽ được đặt trong một CSDL của SQL server, lần sau chạy lại thủ tục sẽ không phải dịch lại nữa.
  • 15. THỦ TỤC LƯU TRÚ (STORED PROCEDURE)  Năm bước biên dịch thủ tục:  Thủ tục được phân tích ra thành nhiều phần  Kiểm tra sự tồn tại của các đối tượng (view, table, …) mà thủ tục tham chiếu tới.  Lưu trữ tên thủ tục vào bảng sysobject, lưu trữ các mã lệnh của thủ tục vào bảng syscomments.  Sinh ra mô hình truy vấn của thủ tục và lưu vào bảng sysprocedure  Khi SP được chạy lần đầu tiên, cây truy vấn sẽ được đọc và được tối ưu thành một kế hoạch thủ tục và chạy  tiết kiệm thời gian tái phân tích, biên dịch cây truy vấn mỗi khi chạy thủ tục.
  • 16. THỦ TỤC LƯU TRÚ (STORED PROCEDURE)  Trong một phiên làm việc, nếu SP được thực hiện, nó sẽ được lưu trữ vào vùng nhớ đệm. Những lần sau nếu SP được gọi thực hiện lại thì nó sẽ được đọc trực tiếp ra từ vùng nhớ đệm  nâng cao hiệu suất chạy truy vấn.
  • 17. THỦ TỤC LƯU TRÚ (STORED PROCEDURE)  Cú pháp lệnh tạo SP: CREATE PROC[EDURE] <tên SP> [@ <tên tham số 1> <kiểu DL> [= <giá trị>] [OUTPUT], . . .] [WITH RECCOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION] AS <các câu lệnh SQL, câu lệnh điều khiển, . . .> Giải thích: - =<giá trị>: gán giá trị ban đầu cho tham số - OUTPUT: giá trị thay đổi của tham số ở trong thủ tục được đưa ra bên ngoài thủ tục. Ví dụ
  • 18. THỦ TỤC LƯU TRÚ (STORED PROCEDURE)  Thực hiện thủ tục: EXEC <tên SP>  Thay đổi thủ tục ALTER PRO[CEDURE] . . .  Xóa thủ tục DROP PRO[CEDURE] <tên SP>  Bó thủ tục
  • 19. THỦ TỤC LƯU TRÚ (STORED PROCEDURE)  Sử dụng tùy chọn RECOMPILE trong câu lệnh CREATE PRO:  Thủ tục sẽ được biên dịch lại từ đầu mỗi khi thực hiện  Khi biên dịch lại các thông tin mới của SP được cập nhật và tối ưu lại.  Sử dụng tùy chọn RECOMPILE trong câu lệnh EXEC  Thủ tục sẽ được biên dịch lại trong lần thực thi đó và lưu lại kế hoạch thực thi mới của nó vào vùng nhớ đệm.  Biên dịch lại tất cả các thủ tục của bảng: EXEC sp_recompile <tên bảng>
  • 20. THỦ TỤC LƯU TRÚ (STORED PROCEDURE)  Ví dụ: USE qlnv; SP này như một view có tham số! GO CREATE PROC DS_Phong @BienMaPhong CHAR (3) AS SELECT Manv, HoTen, NgaySinh FROM NhanVien WHERE MaPhong=@BienMaPhong GO Exec DS_Phong 'KDA'
  • 21. THỦ TỤC LƯU TRÚ (STORED PROCEDURE)  Ví dụ: USE qlnv; GO CREATE PROC Soluong_Phong @BienMaPhong CHAR (3), @SL int OUTPUT AS SELECT @SL = COUNT (*) FROM NhanVien WHERE MaPhong=@BienMaPhong GO -- Thuc hien thu tuc luu tru DECLARE @dem INT; DECLARE @phong CHAR(3); SET @phong='KDA'; EXEC Soluong_Phong @phong, @dem OUTPUT --Hoac EXEC Soluong_Phong @BienMaPhong=@phong, @SL=@dem OUTPUT PRINT 'So luong nhan vien phong ' + @phong + ' la: ' + CAST (@dem AS CHAR(20)) --Xoa thu tuc luu tru DROP PROC Soluong_Phong
  • 22. THỦ TỤC LƯU TRÚ (STORED PROCEDURE)  Ví dụ: (Thu tuc luu tru voi tham so mac dinh) CREATE PROC Soluong_Phong_Default @BienMaPhong CHAR (3)='KDA', @SL int OUTPUT AS SELECT @SL = COUNT (*) FROM NhanVien WHERE MaPhong=@BienMaPhong GO DECLARE @dem INT; EXEC Soluong_Phong_Default @SL=@dem EXEC Soluong_Phong_Default 'QTA', @dem
  • 23. Create proc XepLoaiSV @MaSV varchar(10), THỦ TỤC LƯU TRÚ @DTB float output, @XL nvarchar(20) output As (STORE PROCEDURE) Set @DTB = (Select avg(Diem) from KetQua Kq Where MaSV = @MaSV and not exists ( select * from KetQua Kq1 where Kq1.MaSV = @MaSV and Kq1.MaMH=Kq.MaMH and Kq1.LanThi > Kq.LanThi ) ) If @DTB >= 9 Set @XL = N’Xuât sac’ Else if @DTB >= 8 Set @XL = N’Gi~i’ Else if @DTB >= 7 Set @XL = N’Khá’ Else if @DTB >= 5 Set @XL = N’Trung bình’ Else Set @XL = N’Yêu’ Go
  • 25. HÀM CỦA NSD (USER DEFINED FUNCTIONS-UDFs)  Cú pháp câu lệnh: CREATE FUNCTION <tên hàm> ([@<tên tham số> <kiểu DL vô hướng> [= <giá trị>] [, . . .]]) RETURNS <kiểu vô hướng>|<table> [WITH ENCRYPTION] AS BEGIN [<các câu lệnh>] RETURN <giá trị vô hướng>| (<câu lệnh SELECT>)
  • 26. HÀM CỦA NSD (USER DEFINED FUNCTIONS-UDFs) --Ham vo huong 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 --Su dung ham (Ham xuat hien trong bieu thuc) SELECT dbo.Ham_Soluong_Phong('KDA'); SELECT MaPhong, count (*) FROM NhanVien GROUP BY MaPhong HAVING count(*) > dbo.Ham_Soluong_Phong('QTA')
  • 27. HÀM CỦA NSD (USER DEFINED FUNCTIONS-UDFs) --Ham cho ket qua la mot bang CREATE FUNCTION Ham_DS_Phong (@BienMaPhong CHAR (3)) RETURNS @kq TABLE (Manv CHAR(5), HoTen NCHAR(40), NgaySinh DATETIME) BEGIN INSERT INTO @kq SELECT Manv, HoTen, NgaySinh FROM NhanVien WHERE MaPhong=@BienMaPhong RETURN END -- Su dung ham tra ket qua bang nhu la TABLE SELECT * FROM Ham_DS_Phong ('QTA')
  • 28. HÀM CỦA NSD (USER DEFINED FUNCTIONS-UDFs)  UDFs giống như SP nhưng khác ở các điểm sau: UDF SP - Giá trị các tham số không - Có thể đưa giá trị của tham được truyền ra ngoài. số ra ngoài bằng thuộc tính - Trả ra một giá trị bằng mệnh OUTPUT đề RETURN - Có thể trả về một giá trị vô - Chỉ trả về kiểu DL giá trị hướng hoặc một bảng dữ kiểu nguyên liệu.
  • 30. Nội dung  Khái niệm về trigger  Câu lệnh tạo trigger  Các loại trigger  Ứng dụng của trigger  Sửa, xóa trigger
  • 31. Khái niệm về trigger  Thủ tục lưu trú (Stored Procedure) đặc biệt  Triger tự động được chạy mỗi khi có một hành động liên quan đến nó xảy ra  Triger không có tham số, không trả ra giá trị như SP bình thường.  Các loại trigger: Insert trigger, Delete trigger, Update trigger, trigger tổng hợp.
  • 32. Cú pháp câu lệnh tạo trigger CREATE TRIGGER <tên triger> ON <tên bảng>|<tên view> [WITH ENCRYPTION] { {FOR | AFTER| INSTEAD OF} <INSERT [, UPDATE] [, DELETE]> } AS <câu lệnh SQL>
  • 33. Trigger chèn (Insert trigger): định nghĩa  Tự động được thực hiện mỗi khi bản ghi mới được chèn vào bảng gắn với nó  Một bảng tạm Inserted sẽ được sinh ra  Bản ghi cần chèn sẽ được ghi vào bảng cơ sở và bảng Inserted
  • 34. Trigger chèn: ví dụ CREATE TRIGGER trInsNV ON NHANVIEN FOR INSERT AS RAISERROR('%d hang da duoc them vao bang NHANVIEN', 0, 1,@@rowcount) Trigger này tự động được thực hiện mỗi khi có bản ghi mới được chèn vào bảng NHANVIEN
  • 35. Trigger xóa: ví dụ CREATE TRIGGER trDelNV ON NHANVIEN FOR DELETE AS RAISERROR('%d hàng bị xóa trong bảng NHANVIEN', 0, 1,@@rowcount) Trigger này tự động được thực hiện mỗi khi có một hoặc nhiều bản ghi bị xóa ở bảng NHANVIEN
  • 36. Trigger cập nhật (Update trigger): ví dụ CREATE TRIGGER trUpNV ON NHANVIEN FOR UPDATE AS RAISERROR('%d %d hàng đã được sửa ở bảng bảng NHANVIEN', 0, 1,@@rowcount) Trigger này tự động được thực hiện mỗi khi có một câu lệnh Update được thực hiện trên bảng NHANVIEN.
  • 37. Trigger tổng hợp: ví dụ CREATE TRIGGER trIns_UpNV ON NHANVIEN FOR INSERT, UPDATE AS RAISERROR('%d hàng đã được thêm hoặc sửa ở bảng NHANVIEN', 0, 1,@@rowcount)
  • 38. Trigger Instead of  cho phép cập nhật DL các bảng thông qua view có liên kết nhiều bảng
  • 39. Ứng dụng: Đảm bảo ràng buộc toàn vẹn dữ liệu CREATE TRIGGER trDelNV ON NHANVIEN FOR DELETE AS RAISERROR('%d hang bi xoa trong bang NHANVIEN', 0, 1,@@rowcount) ------------ CREATE TRIGGER trDelPhong ON PHONG FOR DELETE AS DELETE NHANVIEN FROM DELETED WHERE DELETED.MAPHONG =NHANVIEN.MAPHONG
  • 40. Ứng dụng: Đóng gói quy tắc nghiệp vụ CREATE TRIGGER trInsNV_PHONG ON NHANVIEN FOR INSERT AS UPDATE PHONG SET SONV = SONV+1 WHERE PHONG.MAPHONG = (SELECT MAPHONG FROM INSERTED)
  • 41. Một số chú ý khi dùng trigger  Một bảng có nhiều trigger  Mỗi một trigger có tên duy nhất  Trong trigger thường dùng mệnh đề IF EXISTS
  • 42. Xóa, sửa trigger  Xoá trigger DROP TRIGGER <tên trigger>  Sửa trigger ALTER TRIGGER <tên trigger> . . .  Xem lại định nghĩa của trigger: sp_helptext  Tạo trigger bằng EM

Editor's Notes

  • #7: Views in the Data Dictionary Once your view has been created, you can query the data dictionary view called USER_VIEWS to see the name of the view and the view definition. The text of the SELECT statement that constitutes your view is stored in a LONG column. Data Access Using Views When you access data using a view, the Oracle server performs the following operations: 1. It retrieves the view definition from the data dictionary table USER_VIEWS . 2. It checks access privileges for the view base table. 3. It converts the view query into an equivalent operation on the underlying base table or tables. In other words, data is retrieved from, or an update is made to, the base tables. Instructor Note The view text is stored in a column of LONG data type. You may need to set ARRAYSIZE to a smaller value or increase the value of LONG to view the text. Views in the Data Dictionary