Tác dụng của Store Procedure Stored Procedure cũng là những thủ tục được viết sẵn bằng SQL chính vì thế chúng có thể giúp người sử dụng có thể tạo các thủ tục để lấy dữ liệu cần thay vì
Trang 1Báo cáo tìm hiểu về store procedure và trigger
Sinh viên thực hiện: Trần Văn Đồng Giáo viên hướng dẫn: Lê Nguyên Sinh
I Store procedure
Định nghĩa
Stored Procedure là những thủ tục đặc biệt được viết bằng các câu lệnh SQL để thực hiện công việc gì đó và nó có thể được dùng lại Stored Procedure được lưu trữ trong siêu dữ liệu của cơ sở dữ liệu
Stored Procedure gần giống như UDF( User Difine Function – Chức năng người dùng) Điểm khác biệt lớn nhất là các Stored Procedure thì được viết bằng ngôn ngữ SQL còn UDF thì không Và Stored Procedure thì phải được gọi bởi câu lệnh CALL procedure hoặc EXECUTE procedure
2 Tác dụng của Store Procedure
Stored Procedure cũng là những thủ tục được viết sẵn bằng SQL chính vì thế chúng có thể giúp người sử dụng có thể tạo các thủ tục để lấy dữ liệu cần thay vì sử dụng các câu truy vấn nhỏ lẻ trên cửa sổ query Hơn nữa, các chương trình sử dụng Stored Procedure sẽ ngắn gọn và dễ sửa lỗi hơn
Stored Procedure được lưu trữ trên cơ sở dữ liệu sau khi tạo ra và chúng ta có thể sử dụng lại nó bắt cứ khi nào cần nên sẽ giảm thời gian viết code truy vấn khi quản trị cũng như khai thác cơ sở dữ liệu
Các Stored Procedure được biên dịch sẵn nên nó làm giảm thời gian thực thi của chương trình
3 Nguyên tắc làm việc của Store Procedure
Stored Procedure được thực thi sau khi ta gọi câu lệnh CALL procedure (tên Stored Procedure) hoặc là EXECUTE procedure(tên Stored Procedure) Các câu lệnh trong Store Procedure được thực thi và kết quả trả về sau khi các Stored Procedure được thực thi thường là một tập hợp và tập các kết quả này có thể sẽ được xử lý bởi một Stored Procedure khác hoặc các chương trình ứng dụng hoặc là có thể kết hợp với các tập kết quả khác
4 Các thành phần Stored Procedures
4.1 Trong Mysql
Cú pháp của Stored Procedure:
CREATE PROCEDURE
(Khai báo tham số đầu vào) BEGIN
Khai báo biến;
Khởi tạo biến;
Các câu lệnh ;
Trang 2Trong đó:
Khai báo tham số
IN/OUT tên tham số kiểu dữ liệu
Tương ứng với tham số đầu vào của Stored Procedure thì ta chọn IN Còn nếu khai báo tham số đầu ra thì ta chọn OUT kiểu dữ liệu ở đây là các kiểu đã được định nghĩa trong mysql Ví dụ: IN STT INTEGER Trong ví dụ này: tên tham số là STT, kiểu dữ liệu là INTEGER STT là một tham số đầu vào
khai báo biến
DECLARE tên biến kiểu dữ liệu
Các biến phải khai báo trong khối BEGIN/SEND Và nó không được bắt đầu bằng @ Kiểu dữ liệu ở đây cũng tương tự như trong khai báo tham số
Phạm vi của biến nằm trong khối BEGIN/END mà nó được khai báo
Ví dụ: DECLARE MSV VARCHAR(6) Trong ví dụ này: MSV là tên biến, kiểu dữ liệu là VARCHAR(6)
Khởi tạo biến
Để đặt giá trị mặc định cho biến ngay khi khai báo chúng ta có thể sử dụng từ khóa DEFAULT Ví dụ: DECLARE GIOITINH VARCHAR DEFAULT NAM;
Nếu không sử dụng cách khởi tạo với giá trị mặc định lúc khai báo ta có thể sử dụng câu lệnh sau: SET tên biến = giá trị
Ví dụ: MSV= ’5617009’
Các câu lệnh
Trong Stored Procedure có thể gồm một(Có thể không có câu lệnh SQL nào) hoặc một khối câu lệnh SQL được xây dựng từ các câu lệnh SQL cơ bản kết hợp với các câu lệnh sau:
Câu lệnh điều khiển
Rẽ nhánh
If btdk then khối câu lệnh else khối câu lệnh end if;
Khối câu lệnh ở đây có thể là một hoặc nhiều câu lệnh(câu lệnh SQL) Nếu có nhiều
câu lệnh thì các câu lệnh phải được đặt trong khối BEGIN/END
CASE BIẾN
WHEN giá trị1 THEN khối câu lệnh;
WHEN giá trị2 THEN khối câu lệnh;
WHEN giá trị n THEN khối câu lệnh;
ELSE khối câu lệnh;
END CASE;
Câu lệnh lặp
While btdk do
Trang 3khối câu lệnh;
END WHILE;
REPEAT
Khối câu lệnh;
UNTIL btdk
END REPEAT;
LOOP … END LOOP với IF và LEAVE
loop_label: LOOP
Khối câu lệnh;
IF btdk THEN LEAVE loop_label;
END IF;
END LOOP ; Label: Là nhãn đánh dấu một mốc nào đó trong chương trình Trong cú pháp vòng lặp
LOOP loop_label là một nhãn Ta có thể tạo một nhãn bất kỳ và sử dụng nó ở bất cứ chỗ nào trong chương trình chỉ với tên nhãn Ví dụ: label1: BEGIN khối câu lệnh END;
LEAVE, ITERATE là từ khóa để chỉ ra chương trình không quay trở lại nhãn được
viết phía đằng sau nó Trong cú pháp của câu lệnh lặp trên nếu thỏa mãn điều kiện trong câu lệnh if thì chương trình sẽ thoát khỏi nhãn loop_label Hay nói cách khác là thoát khỏi vòng lặp
GOTO
Cú pháp: GOTO nhãn;
Chương trình sẽ chuyển điều khiển đến vị trí có nhãn là tên phía sau GOTO
4.2 Trong SQL Server
Cú pháp của Stored Procedure:
CREATE PROC[EDURE][owner] procedure_name [;number]
[{@parameter data_type}
[VARYING][=default][OUTPUT]
][,…n]
[WITH{RECOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION}]
[FOR REPLICATION]
AS sql_statement[…n]
Trong đó:
Owner: tên của user sở hữu Stored Procedure Nó phải là tên của user hiện tại Hoặc
là tên một user đang sử dụng trong hệ thống các user
procedure_name: là tên của Stored Procedure Procedure_name phải tuân theo quy
tắc khai báo định danh của cơ sở dữ liệu
Các local procedure tạm thời thường phải bắt đầu bằng một dấu #, còn các global procedure tạm thời thường có tên bắt đầu bởi hai dấu # Và tên các Stored Procedure kể cả các dấu # có độ dài tối đa là 128 kí tự
Trang 4;numbeer: là một số nguyên tùy ý dùng để gộp nhóm các Stored Procedure có cùng tên Chính vì thế, ta có thể chỉ dùng một câu lênh để xóa đồng thời các Store Procedure này
@parameter: là một biến trong Stored Procedure Trong một Stored Procedure có thể
có từ 2 đến 100 biến và các biến bắt đầu bằng ký tự @ Mỗi biến có phạm vi hoạt động trong Stored Procedure chứa nó vì thế Tên biến có thể giống nhau giữa các biến trong các Stored Procedure khác nhau Mặc định mỗi biến trong Stored procedure có phạm vi hoạt động không đổi có nghĩa là nó không thể sử dụng được trong các bảng, các cột hoặc trong các đối tượng cơ sở dữ liệu khác ngoài Stored Procedure
data_type: Là kiểu dữ liệu của biến Tất cả các kiểu dữ liệu kể trừ các kiểu dữ liệu sử
dụng trong bảng đều có thể trở thành kiểu dữ liệu trong Stored Procedure Tuy nhiên, kiểu con trỏ chỉ được sử dụng trong các biến đầu ra của Stored Procedure
Các kiểu dữ liệu có thể sử dụng là:
bigint: là kiểu số nguyên có khoảng giá trị từ -2^63 đến 2^63 - 1
int: cũng là kiểu nguyên có khoảng giá trị từ -2^31 đến 2^31 -1
smallint là kiểu nguyên có giá trị từ -2^15 đến 2^15 – 1
tinyint là kiểu nguyên có giá trị từ 0 đến 255
bit là kiểu nguyên có giá trị 0 hoặc 1
decimal là kiểu số thập phân có giá trị từ -10^38 + 1 đến 10^38 + 1
nummeric tương tự như kiểu decimal
money: là kiểu tiền tệ có giá trị từ -2^63 đến 2^63 -1
float: là kiểu số thực có giá trị từ -1.79E + 308 đến -2.23E -308, 0 và 2.23E + 308 đến 1.79E +308
Các kiểu dữ liệu character Strings
char: là kiểu có độ dài cố định không gồm các ký tự unicode và có độ dài lớn nhất là
8000 ký tự
varchar là kiểu dữ liệu có đội dài thay đổi, không gồm các ký tự unicode và có độ dài lớn nhất là 8000 ký tự
text: có độ dài không cố định và không gồm các ký tự unicode với độ dài lớn nhất là 2^31 – 1 ký tự
Các kiểu dữ liệu unicode Character Strings: nchar, nvarchar, ntext tương tự như char, varchar, text và chúng chỉ khác nhau ở chỗ nchar, nvarchar, ntext có thể có các ký tự unicode
Ngoài ra còn có các kiểu dữ liệu khác như images, table, timestamp( kiểu dữ liệu này lưu trữ thời gian diễn ra việc update các bản ghi trong bảng), sql_variant
Chú ý: không giới hạn số lượng biến output và nó còn có thể có kiễu dữ liệu con trỏ
VARYING
Từ khóa này chỉ ra tập kết quả trả ra có thể coi như là các biến đầu ra Tập kết quả này
có thể được gắn vào một biến con trỏ nào đó để sử dụng cho các ứng dụng hoặc là các Stored Procedure khác
default
Trang 5Chỉ ra biến đầu ra sẽ nhận giá trị mặc định.
OUTPUT
Chỉ ra các biến trả về của Stored Procedure Stored Procedure có thể trả về các kiểu
dữ liệu như là: Text, ntext và image hoặc là kiểu con trỏ
n
Số các biến có thể từ 0 đến 100 biến
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
RECOMPLE
Từ khóa này để chỉ ra bản thân Stored Procedure chỉ được dịch khi chạy và nó không được dịch sẵn và lưu trữ trong bộ nhớ
ENCRYPTION
Khi sử dụng từ khóa này Stored Procedure sẽ được mã hóa và ghi lại Nếu như muốn
sử dụng lại Stored Procedure này thì cần phải giải mã nó Các ký tự mã hóa thường được lưu trữ trong bảng Syscommands của hệ thống Và khi giải mã có thể gặp phải một số sai sót
AS
Chỉ ra các hoạt động của Stored Procedure Phía sau nó sẽ là các câu lệnh SQL
n
Chỉ ra là sẽ có nhiều câu lệnh SQL phía sau AS
5 Các loại Store Procedure
5.1 System Stored Procedure
Nhiều chức năng quản trị trong SQL Server được thực thi thông qua một loại thủ tục đặc biệt Thủ tục đó thường được gọi là System Stored Procedure System Stored Procedures thường được xây dựng và lưu trữ trong cơ sở dữ liệu nguồn và tên của nó thường có tiếp đầu ngữa là SP_ System Stored Procedure thường có mặt trong mọi thệ thống cơ sở dữ liệu của người sử dụng
Là những Stored Procedure chứa trong Master database và thường bắt đầu bằng tiếp đầu ngữ Sp_ Các Stored Procedure này thuộc loại built-in và chủ yếu dùng trong việc quản lý database(administration) và security
5.2 User – defined Stored Procedures
Là những module hoặc là những chức năng thường dùng được khai báo dưới dạng một hàm để rút ngắn code chương trình Một Stored Procedure có thể có biến đầu vào và trả ra một kết quả dạng bảng, kết quả thuộc một kiểu dữ liệu nào đó hoặc
là một thông điệp đến các client Nó có thể sử dụng các câu lệnh DDL hoặc là DML
và trả về tập các biến
5.3 Extended Stored Procedure
Cho phép chúng ta tạo các Stored Procedure bằng một ngôn ngữ khác ví dụ như C Sau đó biên dịch Stored Procedure này ra file DLL và SQL Server có thể load và chạy
nó
7 Ví dụ minh hoạ
Trang 61 Định nghĩa
Trigger là một đối tượng được sử dụng trong cơ sở dữ liệu Nó có thể coi là một sự kiện xảy ra sau khi có một thay đổi nào đó đối với bảng dữ liệu
Dưới góc độ nào đó, Trigger có thể coi là trường hợp đặc biệt của Store procedure Điểm khác biệt giữa Store procedure và Trigger: Trigger chỉ được sử dụng trong phạm
vi bảng dữ liệu và nó chỉ được kích hoạt khi có các thao tác insert, delete hoặc là update Khi tạo Trigger bạn chúng ta cân phải chỉ ra hoạt động của nó thông qua các câu lệnh
2 Tác dụng của Trigger
Trigger được sử dụng để: Khi có một thay đổi nào đó đối với bảng trigger sẽ được kích hoạt và nó sẽ làm nhiệm vụ kiểm tra dữ liệu, đồng bộ hóa dữ liệu, đảm bảo các mối quan hệ giữa các bảng
Trigger được sử dụng để đảm bảo sự toàn vẹn dữ liệu trong cơ sở dữ liệu bằng cách các câu lệnh cho phép người quản trị có thể kiểm tra dữ liệu khi có sự thay đổi
dữ liệu
3 Nguyên tắc làm việc của Trigger
Trigger thường được kích hoạt khi có các sự kiện sau xảy ra:
- chèn (Insert), xóa (Delete) hay cập nhật (Update) một bảng
- Khởi động, tắt hệ thống hoặc là hệ thống gặp một lỗi nào đó
- User đăng nhập hoặc thoát khỏi hệ thống
4 Các thành phần Trigger
4.1 Trigger trong MYSQL
Cú pháp:
CREATE TRIGGER trigger_name;
ON table | view
Trang 7[WITH ENCRYPTION]
{FOR|ALTER|INSTEAD OF}{[DELETE][,][INSERT][,][UPDATE]}
AS Sql_statement
Trong đó:
WITH ENCRYPTION: dùng để chặn người dùng khác không được xem nội dung của Trigger
ALTER dùng để chỉ ra Trigger này là loại ALTER có nghĩa là nó sẽ được thực thi sau khi câu lệnh sql kích hoạt Trigger được thực hiện thành công
ALTER Trigger là kiểu mặc định khi sử dụng từ khóa FOR
Từ khóa ALTER không được sử dụng với các Trigger trên view
INSTEAD OF: Khi sử dụng từ khóa này, Trigger sẽ được thực hiện thay vì thực hiện câu lệnh sql kích hoạt Trigger Trigger loại này có thể được sử dụng trên view
DELETE,INSERT,UPDATE: để chỉ ra Trigger sẽ được thực hiện khi ta sử dụng thao tác nào với bảng dữ liệu
4.2 Trigger trong SQL Server
Trigger gồm 3 phần chính:
Sự kiện Trigger
Đây có thể là một câu lệnh truy vấn, một sự kiện trong database hoặc là một sự kiên liên quan đến user mà có thể kích hoạt Trigger Các sự kiện kích hoạt Trigger đã được trình bày ở phần 3
Ví dụ:
UPDATE OF parts_on_hand ON inventory
UPDATE OF MASV ON SINHVIEN
Trigger có phần sự kiện kích hoạt trên sẽ được kích hoạt khi trường sinh viên được UPDATE
Một Trigger còn có thể sử dụng với nhiều sự kiện: … INSERT OR UPDATE
OR DELETE OF MASV… Khi sử dụng Trigger với nhiều sự kiện như thế thì Trigger
sẽ được kích hoạt khi một trong các Sự kiện INSERT hoặc là UPDATE hoặc là DELETE xảy ra đối với trường sinh viên
Điều kiện Trigger
Thường được chỉ ra bởi một biểu thức boolean và Trigger sẽ được kích hoạt khi biểu thức đó nhận giá trị True Nó sẽ không được kích hoạt khi biểu thức nhận giá trị false hoặc là không xác định Ví dụ: LENGHT(MASV)>6
hoạt động Trigger
Thường là một thủ tục được viết bằng SQL hoặc PL/SQL gồm các câu lệnh sẽ được thi hành sau khi các sự kiện kích hoạt Trigger thỏa mãn:
Sự kiện Trigger xảy ra
Điều kiện Trigger trả về true
Cũng giống như Store procedure các hoạt động Trigger cũng có thể gồm:
- Các câu lệnh SQL, PL/SQL, hoặc java
- Gọi các Store procedure
Trang 8Hình dưới là một ví dụ về Trigger và chỉ ra các thành phần của một Trigger
5 Các loại Trigger
5.1 Row Triggers và Statement Triggers
Row Trigger là Trigge được kích hoạt khi có sự tác động đến các dòng bản ghi trong bảng dữ liệu Mỗi khi có một bản ghi thay đổi thì Row Trigger sẽ được kích hoạt một lần
Statement Trigger Là Trigger chỉ xảy ra một lần khi có sự kiện Trigger xảy ra( Tức là nó chỉ xảy ra một lần sau khi sư kiện đó xảy ra rồi thôi) Statement trigger
có ích khi mà dữ liệu trong phần hoạt động của nó không phụ thuộc vào dữ liệu miễn
là các sự kiện Trigger xảy ra hoặc là các bản ghi bị thay đổi
5.2 Before và Alter Triggers
5.3 Instead of Triggers
5.4 Trigger trên System Events và User Event
7 Một số chú ý khi sử dụng Trigger
Trigger rất có ích khi sử dụng để đảm bảo cho các cơ sở dữ liệu hoạt động an toàn
và có hiệu quả nhưng chúng ta cũng cần phải chú ý khi sử dụng nó:
- Tránh sử dụng các Trigger mà có khả năng kích hoạt lẫn nhau ví dụ như trong hình dưới đây
Trang 9Khi sử dụng các Trigger như trên tạo ra một sự bùng nổ Trigger và làm cho người
sử dụng không thể kiểm soát được các hoạt động của nó dẫn tới hậu quả không lường trước được
8 Ví dụ minh hoạ