store-procedure and trigger

9 1.6K 22
store-procedure and trigger

Đang tải... (xem toàn văn)

Thông tin tài liệu

Báo cáo tìm hiểu về store procedure và triggerSinh viên thực hiện: Trần Văn ĐồngGiáo viên hướng dẫn: Lê Nguyên SinhI. Store procedureĐịnh nghĩaStored 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 ProcedureStored 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 ProcedureStored 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 Procedures4.1. Trong MysqlCú pháp của Stored Procedure:CREATE PROCEDURE(Khai báo tham số đầu vào)BEGINKhai báo biến;Khởi tạo biến;Các câu lệnh ; END;Trong đó:Khai báo tham số IN/OUT tên tham số kiểu dữ liệuTươ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ếnDECLARE tên biến kiểu dữ liệuCá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ểnRẽ 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ẾNWHEN 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ặpWhile btdk do khối câu lệnh;END WHILE;REPEATKhối câu lệnh; UNTIL btdkEND REPEAT;LOOP … END LOOP với IF và LEAVEloop_label: LOOPKhối câu lệnh;IF btdk THENLEAVE 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. GOTOCú 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 ServerCú 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 - 1int: cũng là kiểu nguyên có khoảng giá trị từ -2^31 đến 2^31 -1smallint là kiểu nguyên có giá trị từ -2^15 đến 2^15 – 1tinyint 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 + 1nummeric tương tự như kiểu decimalmoney: là kiểu tiền tệ có giá trị từ -2^63 đến 2^63 -1float: 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 Stringschar: 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ỏ.VARYINGTừ 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.OUTPUTChỉ 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}RECOMPLETừ 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ớ.ENCRYPTIONKhi 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.ASChỉ ra các hoạt động của Stored Procedure. Phía sau nó sẽ là các câu lệnh SQL.nChỉ ra là sẽ có nhiều câu lệnh SQL phía sau AS5. Các loại Store Procedure5.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ạ II. Trigger1. Định nghĩaTrigger 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 TriggerTrigger đượ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 TriggerTrigger 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 Trigger4.1. Trigger trong MYSQLCú pháp:CREATE TRIGGER trigger_name;ON table | view [WITH ENCRYPTION]{FOR|ALTER|INSTEAD OF}{[DELETE][,][INSERT][,][UPDATE]}AS Sql_statementTrong đó:WITH ENCRYPTION: dùng để chặn người dùng khác không được xem nội dung của TriggerALTER 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 ServerTrigger 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 inventoryUPDATE OF MASV ON SINHVIENTrigger 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 TriggerThườ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 TriggerThườ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ề trueCũ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 Trigger5. Các loại Trigger5.1 Row Triggers và Statement TriggersRow 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 TriggerTrigger 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 Triggers5.3 Instead of Triggers5.4 Trigger trên System Events và User Event7. Một số chú ý khi sử dụng TriggerTrigger 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ạ . dưới là một ví dụ về Trigger và chỉ ra các thành phần của một Trigger5 . Các loại Trigger5 .1 Row Triggers và Statement TriggersRow Trigger là Trigge được. đổi.5.2 Before và Alter Triggers5.3 Instead of Triggers5.4 Trigger trên System Events và User Event7. Một số chú ý khi sử dụng TriggerTrigger rất có ích khi

Ngày đăng: 12/01/2013, 15:41

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan