Stored Procedure

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 8

Bá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. Trigger
1. Đị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 Oracle
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
Hình dưới là một ví dụ về Trigger và chỉ ra các thành phần của một Trigger
4.2. Trigger trong SQL SERVER
Cú pháp:
CREATE TRIGGER trigger_name;
ON table | view
[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.
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
6. Hướng dẫn sử dụng Triggers trong mysql

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.

Khi 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ạ
II. 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 Procedure
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ự.
;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
Chỉ 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ó.
6. Hướng dẫn sử dụng Store Procedure trong mysql

7. Ví dụ minh hoạ

You might also like