1 / 20

資料庫系統概論 CH11 觸發程序及自訂函數

資料庫系統概論 CH11 觸發程序及自訂函數. 鄧姚文. 大綱. 另一種預存程序 -Trigger DML 觸發程序 DDL 觸發程序 自訂函數 -Function. 觸發程序的種類. 分為 DML 及 DDL 若未特別說明,一般觸發程序是指 DML DML 觸發程序 為 INSERT 、 UPDATE 、 DELETE 設計的事件 處理常式 DDL 觸發程序 為 CREATE 、 DROP 、 ALTER 設計的事件 處理常式. DML 觸發程序. AFTER Trigger

brigit
Télécharger la présentation

資料庫系統概論 CH11 觸發程序及自訂函數

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 資料庫系統概論CH11 觸發程序及自訂函數 鄧姚文

  2. 大綱 另一種預存程序-Trigger DML觸發程序 DDL觸發程序 自訂函數-Function

  3. 觸發程序的種類 • 分為DML及DDL • 若未特別說明,一般觸發程序是指DML • DML觸發程序 • 為 INSERT、UPDATE 、DELETE 設計的事件處理常式 • DDL觸發程序 • 為 CREATE、DROP、ALTER 設計的事件處理常式

  4. DML 觸發程序 • AFTER Trigger • 在執行 INSERT、UPDATE、DELETE 之後觸發 • INSTEAD OF Trigger • 在執行 INSERT、UPDATE、DELETE 之前觸發 • 特殊資料表: • INSERTED 新增的資料 • DELETED 刪出的資料 • UPDATE 相當於先 DELETE 再 INSERT

  5. 建立DML觸發程序

  6. 建立DML觸發程序

  7. 引動觸發預存

  8. 停用觸發程序 • 觸發程序一經建立,就已啟用 • 停用: ALTER TABLE CustomerSupplier disable TRIGGER chkCustomerName 或 DISABLE TRIGGER chkCustomerName ON CustomerSupplier

  9. INSTEAD OF Trigger 可定義在使用多個資料表的檢視(VIEW) 可以取消部份或全部動作 可以取代原有的動作

  10. INSTEAD OF Trigger • 儲存前檢查-程式11-2 • 以Instead of Update取代Update • 在檢視使用觸發程序-程式11-3 • 先判斷輸入新記錄的CustSupCode欄位值是否已儲存在於CustomerSupplier資料表,若不存在則新增;再判斷新記錄的OrderCode欄位是否已在Orders資料表中,若不存在則新增

  11. 取得更改及刪除的資料 • 經常使用的兩個特殊資料表 • 取得新增及更改的資料 SELECT * FROM INSERTED • 取得刪除的資料 SELECT * FROM DELETED

  12. 相關可用函數 • Columns_Updated-以欄位順序判斷某欄位是否已更新 If Columns_Updated() & 2 = 2 … If Columns_Updated() & 3 = 3 … • Update-以欄名判斷某欄位是否已更新 If Updated(Totals) or Update(OrderDate) …

  13. 建立DDL觸發程序

  14. 建立DDL觸發程序 • 建立DDL觸發程序 • 設計重點是ON及FOR子句 • ON表示有效範圍-可以是ALL SERVER或DATABASE • FOR之後是DDL觸發程序的事件 • 刪除資料表時復原 CREATE TRIGGER NotDropTableOnDaShang ON DATABASE FOR DROP_TABLE AS RaisError(‘不可刪除資料表’, 16, 1) ROLLBACK

  15. 使用EVENTDATA函數 • 只可使用於DDL觸發程序 • 提供啟動觸發程序的相關資訊 • 傳回內容是xml型態 • 以value方法查詢CommandText,取得執行的T-SQL

  16. 使用EVENTDATA函數

  17. 自訂函數 FUNCTION • User-defined Function(UDF) • 運算之後,傳回一項資料 • 一個資料表 • 一個純量值(Scalar) • 參數只能傳入,不能傳出 • 不可以使用 OUTPUT 參數 • 可以放在運算式之中 • 可以在 SELECT 敘述之中使用 UDF

  18. 函數的特性 • 內建及自訂函數必定有唯一的名稱,再加上傳入的參數、傳回值及主體 • 函數屬性可以定義函數的作業方式,但這些屬性都是由系統決定,在T-SQL中可以OBJECTPROPERTY取得 • IsDeterministic:函數可分為決定性(True)及非決定性(False) • IsPrecise:函數可分為精確(True)及不精確(False) • IsSystemVerified:系統可否驗證函數的有效位數及決定性屬性 • SystemDataAccess:函數可否存取伺服器的系統資料 • UserDataAccess:函數可否存取使用者資料

  19. 函數與預存程序 • 相同 • 副程式:依照傳入參數執行預定的運算 • 差異 • 預存程序必須以 EXEC 指令執行,函數可以在敘述之中使用 • 函數只能傳回一個值,預存程序可以使用多個傳出參數 • 函數通常只運算不更新,預存程序通常以交易更新多個資料表

  20. 建立自訂函數 • 使用Create Function • 純量函數-IIF-程式11-7 • 純量函數-getYMDays-程式11-8 • 資料表值函數-ProductStockCount -程式11-9 • 內嵌函數-ProductStockCountIn -程式11-10

More Related